9.28. Funções de administração do sistema #

9.28.1. Funções de definição de configuração
9.28.2. Funções de sinalização do servidor
9.28.3. Funções de controle de cópia de segurança
9.28.4. Funções de controle da recuperação
9.28.5. Funções de sincronização de instantâneo
9.28.6. Funções de gerenciamento de replicação
9.28.7. Funções de gerenciamento de objetos de banco de dados
9.28.8. Funções de manutenção de índice
9.28.9. Funções genéricas para acesso a arquivo
9.28.10. Funções de bloqueio consultivo

As funções descritas nesta seção são usadas para controlar e monitorar uma instalação do PostgreSQL.

9.28.1. Funções de definição de configuração #

A Tabela 9.95 descreve as funções disponíveis para consultar e alterar os parâmetros de configuração em tempo de execução.

Tabela 9.95. Funções de definição de configuração

Função

Descrição

Exemplo(s)

current_setting ( setting_name text [, missing_ok boolean ] ) → text

Retorna o valor corrente da configuração setting_name. Se a configuração não existir, a função current_setting irá gerar um erro, a menos que o argumento missing_ok seja fornecido e seja true (caso em que é retornado NULL). Esta função corresponde ao comando SHOW do SQL.

current_setting('datestyle')ISO, DMY

set_config ( setting_name text, new_value text, is_local boolean ) → text

Define o parâmetro setting_name para o new_value, e retorna esse valor. Se is_local for true, o novo valor será aplicado somente durante a transação corrente. Se for desejado que o novo valor se aplique ao restante da sessão corrente, deve ser especificado false. Esta função corresponde ao comando SET do SQL.

A função set_config aceita o valor NULL para new_value, mas como as configurações não podem ser nulas, isto é interpretado como uma solicitação para redefinir a configuração para seu valor padrão.

set_config('log_statement_stats', 'off', false)off


9.28.2. Funções de sinalização do servidor #

As funções descritas na Tabela 9.96 enviam sinais de controle para outros processos servidores. O uso destas funções é restrito a superusuários por padrão, mas o acesso pode ser concedido a outros usuários usando o comando GRANT, com as exceções observadas.

Cada uma destas funções retorna true se o sinal foi enviado com sucesso, ou false se o envio do sinal falhou.

Tabela 9.96. Funções de sinalização do servidor

Função

Descrição

pg_cancel_backend ( pid integer ) → boolean

Cancela a consulta corrente da sessão cujo processo servidor tem o ID de processo especificado. Seu uso também será permitido se a role (função de banco de dados) que fizer a chamada for membro da role cujo processo servidor está sendo cancelado, ou se a role que fizer a chamada tiver o privilégio pg_signal_backend. Entretanto, apenas superusuários podem cancelar processos servidor de superusuário. Como exceção, as roles com privilégio de pg_signal_autovacuum_worker têm permissão para cancelar processos de trabalho de limpeza automática (autovacuum), que, de outra maneira, seriam considerados processos servidores de superusuário.

pg_log_backend_memory_contexts ( pid integer ) → boolean

Solicita registrar os contextos de memória do processo servidor com o ID de processo especificado. Esta função pode enviar a solicitação para os processos do servidor, exceto para o processo coletor de log (logger). Estes contextos de memória serão registrados no nível de mensagem LOG. Irão aparecer no log do servidor com base na configuração de log definida (veja a Seção 19.8 para obter mais informações), mas não serão enviados ao cliente, independentemente de client_min_messages.

pg_reload_conf () → boolean

Faz com que todos os processos servidor do PostgreSQL recarreguem seus arquivos de configuração. (É começado enviando o sinal SIGHUP para o processo postmaster, que por sua vez envia SIGHUP para cada um de seus descendentes.) Podem ser usadas as visões pg_file_settings, pg_hba_file_rules e pg_ident_file_mappings para verificar a existência de possíveis erros nos arquivos de configuração antes de recarregar.

pg_rotate_logfile () → boolean

Sinaliza o gerenciador de arquivos de log para alternar para um novo arquivo de saída imediatamente. Funciona apenas quando o coletor de log nativo está em execução, caso contrário não há subprocesso do gerenciador de arquivos de log.

pg_terminate_backend ( pid integer, timeout bigint DEFAULT 0 ) → boolean

Termina a sessão cujo processo servidor tem o ID de processo especificado. Seu uso também será permitido se a role (função de banco de dados) que fizer a chamada for membro da role cujo processo servidor está sendo terminado, ou se a role que fizer a chamada possuir o privilégio pg_signal_backend. Entretanto, apenas superusuários podem encerrar processos servidor de superusuários. Como exceção, as roles com privilégio de pg_signal_autovacuum_worker têm permissão para cancelar processos de trabalho de limpeza automática (autovacuum), que, de outra maneira, seriam considerados processos servidores de superusuário.

Se não for especificado timeout, ou for zero, a função irá retornar true se o processo tiver realmente terminado, ou não, indicando apenas que o envio do sinal foi bem-sucedido. Se timeout for especificado (em milissegundos), e for maior que zero, a função irá esperar até que o processo esteja realmente terminado, ou até que o tempo especificado tenha decorrido. Se o processo estiver terminado, a função irá retornar true. Atingido o tempo limite, é emitido um aviso e retornado false.


As funções pg_cancel_backend e pg_terminate_backend enviam sinais (SIGINT e SIGTERM, respectivamente) para processos servidor identificados pelo ID do processo. O ID do processo de um servidor ativo pode ser encontrado na coluna pid da visão pg_stat_activity, ou listando os processos postgres no servidor (usando o comando ps no Unix, ou o Gerenciador de Tarefas no Windows). A função de banco de dados (identificador de autorização/role) de um servidor ativo pode ser encontrada na coluna usename da visão pg_stat_activity.

A função pg_log_backend_memory_contexts pode ser usada para registrar os contextos de memória de um processo servidor. Por exemplo:

postgres=# SELECT pg_log_backend_memory_contexts(pg_backend_pid());
 pg_log_backend_memory_contexts
--------------------------------
 t
(1 linha)

Será registrada uma mensagem para cada contexto de memória. Por exemplo:

LOG:  logging memory contexts of PID 10377
STATEMENT:  SELECT pg_log_backend_memory_contexts(pg_backend_pid());
LOG:  level: 1; TopMemoryContext: 80800 total in 6 blocks; ↵
                14432 free (5 chunks); 66368 used
LOG:  level: 2; pgstat TabStatusArray lookup hash table: ↵
                8192 total in 1 blocks; 1408 free (0 chunks); 6784 used
LOG:  level: 2; TopTransactionContext: 8192 total in 1 blocks; ↵
                7720 free (1 chunks); 472 used
LOG:  level: 2; RowDescriptionContext: 8192 total in 1 blocks; ↵
                6880 free (0 chunks); 1312 used
LOG:  level: 2; MessageContext: 16384 total in 2 blocks; ↵
                5152 free (0 chunks); 11232 used
LOG:  level: 2; Operator class cache: 8192 total in 1 blocks; ↵
                512 free (0 chunks); 7680 used
LOG:  level: 2; smgr relation table: 16384 total in 2 blocks; ↵
                4544 free (3 chunks); 11840 used
LOG:  level: 2; TransactionAbortContext: 32768 total in 1 blocks; ↵
                32504 free (0 chunks); 264 used
...
LOG:  level: 2; ErrorContext: 8192 total in 1 blocks; ↵
                7928 free (3 chunks); 264 used
LOG:  Grand total: 1651920 bytes in 201 blocks; ↵
                622360 free (88 chunks); 1029560 used

Se houver mais de 100 contextos filho no mesmo pai, os primeiros 100 contextos filho serão registrados, juntamente com o resumo dos contextos restantes. Note que chamadas frequentes a esta função podem gerar uma sobrecarga significativa, porque pode ser gerado um grande número de mensagens de log.

9.28.3. Funções de controle de cópia de segurança #

As funções descritas na Tabela 9.97 ajudam a fazer cópias de segurança (backup) online. Estas funções não podem ser executadas durante a recuperação (exceto pg_backup_start, pg_backup_stop e pg_wal_lsn_diff).

Para obter detalhes sobre o uso apropriado destas funções, veja a Seção 25.3.

Tabela 9.97. Funções de controle de cópia de segurança

Função

Descrição

pg_create_restore_point ( name text ) → pg_lsn

Cria um registro de marcador com nome no registro de transações (WAL), que pode ser usado posteriormente como destino de recuperação, e retorna o local do registro de transações correspondente. O nome fornecido pode ser usado com recovery_target_name para especificar o ponto até onde a recuperação vai prosseguir. Evite criar vários pontos de recuperação com o mesmo nome, porque a recuperação será interrompida no primeiro ponto cujo nome corresponda ao limite da recuperação.

Esta função é restrita a superusuários por padrão, mas outros usuários podem receber o privilégio EXECUTE para executar esta função.

pg_current_wal_flush_lsn () → pg_lsn

Retorna o local corrente de descarga no registro de transações (veja as notas abaixo).

pg_current_wal_insert_lsn () → pg_lsn

Retorna o local corrente de inserção no registro de transações (veja as notas abaixo).

pg_current_wal_lsn () → pg_lsn

Retorna o local corrente de escrita no registro de transações (veja as notas abaixo).

pg_backup_start ( label text [, fast boolean ] ) → pg_lsn

Prepara o servidor para iniciar uma cópia de segurança online. O único parâmetro requerido é o rótulo arbitrário definido pelo usuário para a cópia de segurança. (Normalmente, este é o nome sob o qual o arquivo de descarga (dump) da cópia de segurança será armazenado.) Se o segundo parâmetro opcional for especificado como true, indica a execução da função pg_backup_start o mais rápido possível. Isto força a criação de um ponto de verificação imediato, causando um pico nas operações de E/S, diminuindo a velocidade de quaisquer consultas sendo executadas no momento.

Esta função é restrita a superusuários por padrão, mas outros usuários podem receber o privilégio EXECUTE para executar esta função.

pg_backup_stop ( [wait_for_archive boolean ] ) → record ( lsn pg_lsn, labelfile text, spcmapfile text )

Termina a execução de uma cópia de segurança online. O conteúdo desejado do arquivo de rótulo da cópia de segurança e do arquivo de mapeamento de espaços de tabela é retornado como parte do resultado da função devendo ser gravados em arquivos na área de cópia de segurança. Estes arquivos não devem ser escritos no diretório de dados ativo (fazer isto fará com que o PostgreSQL não consiga reiniciar em caso de falha.).

Existe um segundo parâmetro opcional do tipo de dados boolean. Se for false, a função retornará logo após a conclusão da cópia de segurança, sem esperar que o WAL seja arquivado. Este comportamento só é útil com software de cópia de segurança que monitora de forma independente o arquivamento do WAL. Caso contrário, o arquivo do WAL necessário para tornar a cópia de segurança consistente pode estar ausente, e tornar a cópia de segurança inútil. Por padrão, ou quando este parâmetro for true, a função pg_backup_stop irá aguardar que o WAL seja arquivado quando o arquivamento estiver ativo. (No modo de espera (standby), isto significa que aguardará apenas quando archive_mode = always. Se a atividade de escrita no servidor primário estiver baixa, pode ser útil executar a função pg_switch_wal no servidor primário para acionar uma alternância de log imediata.)

Quando executada em um servidor primário, esta função também cria um arquivo de histórico de cópia de segurança na área de registro de transações. O arquivo de histórico inclui o rótulo fornecido à função pg_backup_start, os locais de registro de transações inicial e final para a cópia de segurança, e a hora de início e fim da cópia de segurança. Depois de escrever o local de término, o ponto de inserção do registro de transações corrente é automaticamente avançado para o próximo arquivo de registro de transações, para que o arquivo de registro de transações final possa ser arquivado imediatamente para concluir a cópia de segurança.

O resultado dessa função é um único registro. A coluna lsn contém o local do final da cópia de segurança no registro de transações (que novamente pode ser ignorado). A segunda coluna retorna o conteúdo do arquivo de rótulo da cópia de segurança, e a terceira coluna retorna o conteúdo do arquivo de mapeamento do espaço de tabelas. Estes dados devem ser armazenados como parte da cópia de segurança e são necessários no processo de restauração.

Esta função é restrita a superusuários por padrão, mas outros usuários podem receber o privilégio EXECUTE para executar esta função.

pg_switch_wal () → pg_lsn

Força o servidor a mudar para um novo arquivo de registro de transações, permitindo que o arquivo corrente seja arquivado (assumindo que esteja sendo usado o arquivamento contínuo). O resultado é a localização do final do registro de transações mais 1 no arquivo de registro de transações recém-concluído. Se não houver atividade de registro de transações desde a última alternância de registro de transações, a função pg_switch_wal não fará nada e retornará o local inicial do arquivo de registro de transações atualmente em uso.

Esta função é restrita a superusuários por padrão, mas outros usuários podem receber o privilégio EXECUTE para executar esta função.

pg_walfile_name ( lsn pg_lsn ) → text

Converte o local do registro de transações no nome do arquivo WAL que contém este local.

pg_walfile_name_offset ( lsn pg_lsn ) → record ( file_name text, file_offset integer )

Converte o local do registro de transações no nome do arquivo WAL, e o deslocamento em bytes neste arquivo.

pg_split_walfile_name ( file_name text ) → record ( segment_number numeric, timeline_id bigint )

Extrai o número de sequência e o ID da linha do tempo a partir do nome de um arquivo do WAL.

pg_wal_lsn_diff ( lsn1 pg_lsn, lsn2 pg_lsn ) → numeric

Calcula a diferença em bytes (lsn1 - lsn2) entre dois locais do registro transações. Pode ser usado com pg_stat_replication, ou com algumas das funções descritas na Tabela 9.97, para obter o atraso da replicação.


A função pg_current_wal_lsn mostra o local corrente de escrita no registro de transações no mesmo formato usado pelas funções acima. Da mesma forma, a função pg_current_wal_insert_lsn mostra o local corrente de inserção no registro de transações, e a função pg_current_wal_flush_lsn mostra o local corrente de descarga (flush) no registro de transações. O local de inserção é o final lógico do registro de transações em qualquer instante, enquanto o local de escrita é o final do que foi realmente escrito nos buffers internos do servidor, e o local de descarga é o último local conhecido por ter sido escrito no armazenamento permanente. O local de escrita é o fim do que pode ser examinado de fora do servidor, sendo geralmente o que se deseja se estiver interessado em arquivar os arquivos de registro de transações parcialmente completos. Os locais de inserção e descarga são disponibilizados principalmente para fins de depuração do servidor. Estas operações são todas de leitura-apenas, não requerendo permissões de superusuário.

Pode ser usada a função pg_walfile_name_offset para extrair o nome do arquivo de registro de transações correspondente, e o deslocamento em bytes de um valor pg_lsn. Por exemplo:

postgres=# SELECT * FROM pg_walfile_name_offset((pg_backup_stop()).lsn);
        file_name         | file_offset
--------------------------+-------------
 00000001000000000000000D |     4039624
(1 linha)

De maneira semelhante, a função pg_walfile_name extrai apenas o nome do arquivo de registro de transações.

A função pg_split_walfile_name é útil para calcular um LSN a partir do deslocamento de um arquivo e do nome do arquivo de WAL como, por exemplo:

postgres=# \set file_name '000000010000000100C000AB'
postgres=# \set offset 256
postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset AS lsn
  FROM pg_split_walfile_name(:'file_name') pd,
       pg_show_all_settings() ps
  WHERE ps.name = 'wal_segment_size';
      lsn
---------------
 C001/AB000100
(1 linha)

9.28.4. Funções de controle da recuperação #

As funções descritas na Tabela 9.98 fornecem informações sobre a situação corrente de um servidor em modo de espera (standby). Estas funções podem ser executadas durante a recuperação e em execução normal.

Tabela 9.98. Funções de controle da recuperação

Função

Descrição

pg_is_in_recovery () → boolean

Retorna verdade se a recuperação ainda estiver em andamento.

pg_last_wal_receive_lsn () → pg_lsn

Retorna o último local do registro de transações que foi recebido e sincronizado com o disco pela replicação por fluxo (streaming). Enquanto a replicação por fluxo estiver em andamento, esse valor aumentará monotonicamente. Se a recuperação estiver concluída, esse valor permanecerá estático no local do último registro do WAL recebido e sincronizado com o disco durante a recuperação. Se a replicação por fluxo estiver desativada, ou se ainda não tiver iniciado, a função retornará NULL.

pg_last_wal_replay_lsn () → pg_lsn

Retorna o último local do registro de transações que foi reproduzido durante a recuperação. Se a recuperação ainda estiver em andamento, esse valor aumentará monotonicamente. Se a recuperação estiver concluída, esse valor permanecerá estático no local do último registro do WAL aplicado durante a recuperação. Quando o servidor tiver sido iniciado normalmente sem recuperação, esta função retornará NULL.

pg_last_xact_replay_timestamp () → timestamp with time zone

Retorna o carimbo de data e hora da última transação reproduzida durante a recuperação. Esse é o momento em que o registro do WAL de confirmação ou cancelamento para esta transação foi gerado no servidor primário. Se nenhuma transação foi repetida durante a recuperação, a função retornará NULL. Senão, se a recuperação ainda estiver em andamento, esse valor aumentará monotonicamente. Se a recuperação estiver concluída, esse valor permanecerá estático no momento da última transação aplicada durante a recuperação. Quando o servidor tiver sido iniciado normalmente sem recuperação, esta função retornará NULL.

pg_get_wal_resource_managers () → setof record ( rm_id integer, rm_name text, rm_builtin boolean )

Retorna os gerenciadores de recursos do WAL atualmente carregados no sistema. A coluna rm_builtin indica se é um gerenciador de recursos integrado ou um gerenciador de recursos personalizado carregado por uma extensão.


As funções descritas na Tabela 9.99 controlam o progresso da recuperação. Estas funções podem ser executadas apenas durante a recuperação.

Tabela 9.99. Funções de controle da recuperação

Função

Descrição

pg_is_wal_replay_paused () → boolean

Retorna verdade se tiver sido solicitada uma pausa na recuperação.

pg_get_wal_replay_pause_state () → text

Retorna o estado da pausa da recuperação. Os valores retornados são not paused, se a pausa não tiver sido solicitada, pause requested, se a pausa tiver sido solicitada, mas a recuperação ainda não estiver pausada, e paused, se a recuperação estiver realmente pausada.

pg_promote ( wait boolean DEFAULT true, wait_seconds integer DEFAULT 60 ) → boolean

Promove um servidor no modo de espera ao status primário. Com wait definido como true (o padrão), a função espera até que a promoção esteja concluída ou wait_seconds tenham passados, e retorna true se a promoção tiver sido bem sucedida, ou false caso contrário. Se wait for definido como false, a função retorna true logo após enviar o sinal SIGUSR1 para o postmaster para acionar a promoção.

Esta função é restrita a superusuários por padrão, mas outros usuários podem receber o privilégio EXECUTE para executar esta função.

pg_wal_replay_pause () → void

Solicita pausar a recuperação. A solicitação não significa que a recuperação será interrompida imediatamente. Se for desejada uma garantia de que a recuperação está realmente pausada, é necessário verificar o estado da pausa de recuperação retornado pela função pg_get_wal_replay_pause_state(). Note que função pg_is_wal_replay_paused() retorna se a solicitação foi feita. Enquanto a recuperação estiver pausada, nenhuma outra alteração no banco de dados será aplicada. Se o modo de espera ativa estiver ativo, todas as novas consultas verão o mesmo instantâneo consistente do banco de dados e nenhum outro conflito de consulta será gerado até que a recuperação seja retomada.

Esta função é restrita a superusuários por padrão, mas outros usuários podem receber o privilégio EXECUTE para executar esta função.

pg_wal_replay_resume () → void

Reinicia a recuperação se tiver sido pausada.

Esta função é restrita a superusuários por padrão, mas outros usuários podem receber o privilégio EXECUTE para executar esta função.


As funções pg_wal_replay_pause e pg_wal_replay_resume não podem ser executadas enquanto uma promoção estiver em andamento. Se uma promoção for acionada enquanto a recuperação estiver pausada, o estado de pausa irá terminar e a promoção continuará.

Se a replicação por fluxo estiver desativada, o estado de pausado poderá continuar indefinidamente sem problemas. Se a replicação por fluxo estiver em andamento, os registros do WAL continuarão a ser recebidos, o que eventualmente preencherá todo o espaço em disco disponível, dependendo da duração da pausa, da taxa de geração de WAL e do espaço em disco disponível.

9.28.5. Funções de sincronização de instantâneo #

O PostgreSQL permite que as sessões de banco de dados sincronizem seus instantâneos (snapshots). Um instantâneo determina quais dados são visíveis para a transação que está usando o instantâneo. Instantâneos sincronizados são necessários quando duas ou mais sessões precisam enxergar um conteúdo idêntico do banco de dados. Se duas sessões apenas iniciarem suas transações de forma independente, há sempre a possibilidade de que uma terceira transação seja efetivada (commited) entre as execuções dos dois comandos START TRANSACTION, de tal forma que uma sessão veja os efeitos dessa transação e a outra não.

Para resolver este problema, o PostgreSQL permite que a transação exporte o instantâneo que está usando. Desde que a transação de exportação permaneça aberta, outras transações podem importar o seu instantâneo e, assim, garantir terem exatamente a mesma visão do banco de dados que a primeira transação tem. Mas observe que quaisquer alterações no banco de dados feitas por qualquer uma dessas transações permanecem invisíveis para as outras transações, como é usual para alterações feitas por transações não efetivadas. Assim, as transações são sincronizadas com relação aos dados pré-existentes, mas agem normalmente para as alterações que elas mesmas fazem.

Os instantâneos são exportados pela função pg_export_snapshot, mostrada na Tabela 9.100, e importados pelo comando SET TRANSACTION.

Tabela 9.100. Funções de sincronização de instantâneo

Função

Descrição

pg_export_snapshot () → text

Salva o instantâneo da transação corrente, e retorna uma cadeia de caracteres do tipo de dados text identificando o instantâneo. Esta cadeia de caracteres deve ser passada (por fora do banco de dados) para os clientes que desejam importar o instantâneo. O instantâneo fica disponível para importação somente até o final da transação que o exportou.

Uma transação pode exportar mais de um instantâneo, se for necessário. Note que a exportação só é útil nas transações READ COMMITTED, uma vez que no nível REPEATABLE READ, e nos níveis de isolamento mais altos, as transações usam o mesmo instantâneo ao longo de sua vida útil. Uma vez que a transação tenha exportado quaisquer instantâneos, ela não pode ser preparada com PREPARE TRANSACTION.

pg_log_standby_snapshot () → pg_lsn

Captura um instantânea das transações em execução e escreve no WAL, sem precisar esperar que o bgwriter ou o checkpointer as registrem. É útil para a decodificação lógica no modo de espera, porque a criação de um encaixe lógico precisa aguardar até que este registro seja reproduzido no modo de espera.


9.28.6. Funções de gerenciamento de replicação #

As funções descritas na Tabela 9.101 se destinam a controlar e interagir com recursos de replicação. Veja a Seção 26.2.5, a Seção 26.2.6, e o Capítulo 48 para obter informações sobre os recursos subjacentes. O uso de funções de origem de replicação só é permitido a superusuários por padrão, mas pode ser permitido a outros usuários usando o comando GRANT. O uso de funções de encaixes de replicação é restrito a superusuários e usuários com o privilégio REPLICATION.

Muitas dessas funções possuem comandos equivalentes no protocolo de replicação; veja a Seção 54.4.

As funções descritas na Seção 9.28.3, Seção 9.28.4 e na Seção 9.28.5 também são relevantes para replicação.

Tabela 9.101. Funções de gerenciamento de replicação

Função

Descrição

pg_create_physical_replication_slot ( slot_name name [, immediately_reserve boolean, temporary boolean ] ) → record ( slot_name name, lsn pg_lsn )

Cria um encaixe de replicação física chamado slot_name. O segundo parâmetro opcional, quando true, determina que o LSN para este encaixe (slot) de replicação seja reservado imediatamente; caso contrário, o LSN é reservado na primeira conexão de um cliente de replicação por fluxo (streaming). O fluxo de alterações de um encaixe físico só é possível com o protocolo de replicação por fluxo — veja a Seção 54.4. O terceiro parâmetro opcional, temporary, quando definido como true, determina que o encaixe não deve ser armazenado permanentemente em disco, e deve ser usado apenas pela sessão corrente. Encaixes temporários também são liberados em caso de erro. Esta função corresponde ao comando do protocolo de replicação CREATE_REPLICATION_SLOT ... PHYSICAL.

pg_drop_replication_slot ( slot_name name ) → void

Suspende o encaixe de replicação física ou lógica chamado slot_name. Igual ao comando do protocolo de replicação DROP_REPLICATION_SLOT.

pg_create_logical_replication_slot ( slot_name name, plugin name [, temporary boolean, twophase boolean, failover boolean ] ) → record ( slot_name name, lsn pg_lsn )

Cria um encaixe de replicação lógica (decodificação) chamado slot_name usando o plugin de saída plugin. O terceiro parâmetro opcional, temporary, quando definido como true determina que o encaixe não deve ser armazenado permanentemente em disco, devendo ser usado apenas pela sessão corrente. Os encaixes temporários também são liberados em caso de erro. O quarto parâmetro opcional, twophase, quando definido como true determina que a decodificação de transações preparadas está ativa para esse encaixe. O quinto parâmetro opcional, failover, quando definido como true especifica que este encaixe está habilitado para ser sincronizado com os servidores de espera, de forma que a replicação lógica possa ser retomada após uma falha. Uma chamada a esta função tem o mesmo efeito que o comando do protocolo de replicação CREATE_REPLICATION_SLOT ... LOGICAL.

pg_copy_physical_replication_slot ( src_slot_name name, dst_slot_name name [, temporary boolean ] ) → record ( slot_name name, lsn pg_lsn )

Copia um encaixe de replicação física existente, chamado src_slot_name, para um encaixe de replicação física chamado dst_slot_name. O encaixe físico copiado começa a reservar o WAL no mesmo LSN do encaixe de origem. O parâmetro temporary é opcional. Se temporary for omitido, será usado o mesmo valor do encaixe de origem. Não é permitida a cópia de um encaixe invalidado.

pg_copy_logical_replication_slot ( src_slot_name name, dst_slot_name name [, temporary boolean [, plugin name ]] ) → record ( slot_name name, lsn pg_lsn )

Copia um encaixe de replicação lógica existente chamado src_slot_name para um encaixe de replicação lógica chamado dst_slot_name, alterando opcionalmente o plugin de saída e a persistência. O encaixe lógico copiado começa no mesmo LSN do encaixe lógico de origem. Os parâmetros temporary e plugin são opcionais; se forem omitidos serão usados os valores do encaixe de origem. A opção failover do encaixe lógico de origem não é copiada sendo definida como false por padrão. Isto serve para evitar o risco de não ser possível continuar a replicação lógica após a transição para o modo de espera, onde o encaixe está sendo sincronizado. Não é permitida a cópia de um encaixe invalidado.

pg_logical_slot_get_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) → setof record ( lsn pg_lsn, xid xid, data text )

Retorna as alterações no encaixe slot_name, começando no ponto a partir do qual as alterações foram consumidas pela última vez. Se upto_lsn e upto_nchanges forem nulos, a decodificação lógica continuará até o final do WAL. Se upto_lsn não for nulo, a decodificação incluirá apenas as transações que foram efetivadas antes do LSN especificado. Se upto_nchanges não for nulo, a decodificação irá parar quando o número de linhas produzidas pela decodificação exceder o valor especificado. Note, no entanto, que o número real de linhas retornadas pode ser maior, porque este limite só é verificado após a adição das linhas produzidas ao decodificar cada nova efetivação de transação. Se o encaixe especificado for um encaixe de dormir failover lógico, a função não irá retornar até que todos os encaixes físicos especificados em synchronized_standby_slots tenham confirmado o recebimento do WAL.

pg_logical_slot_peek_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) → setof record ( lsn pg_lsn, xid xid, data text )

Se comporta como a função pg_logical_slot_get_changes(), exceto pelas alterações não serem consumidas; ou seja, serão retornadas novamente em chamadas futuras.

pg_logical_slot_get_binary_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) → setof record ( lsn pg_lsn, xid xid, data bytea )

Se comporta como a função pg_logical_slot_get_changes(), exceto pelas alterações serem retornadas como bytea.

pg_logical_slot_peek_binary_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) → setof record ( lsn pg_lsn, xid xid, data bytea )

Se comporta como a função pg_logical_slot_peek_changes(), exceto pelas alterações serem retornadas como bytea.

pg_replication_slot_advance ( slot_name name, upto_lsn pg_lsn ) → record ( slot_name name, end_lsn pg_lsn )

Avança a posição corrente efetivada do encaixe de replicação chamado slot_name. O encaixe não será movido para trás, e não será movido para além do local de inserção corrente. Retorna o nome do encaixe, e a posição real para a qual ele foi avançado. As informações atualizadas da posição do encaixe serão escritas no próximo ponto de verificação, se algum avanço for feito. Portanto, no caso de algum problema, o encaixe poderá retornar a uma posição anterior. Se o encaixe especificado for um encaixe de dormir failover lógico, a função não irá retornar até que todos os encaixes físicos especificados em synchronized_standby_slots tenham confirmado o recebimento do WAL.

pg_replication_origin_create ( node_name text ) → oid

Cria uma origem de replicação com o nome externo fornecido e retorna o ID interno atribuído a mesma. O nome não deve ter mais de 512 bytes.

pg_replication_origin_drop ( node_name text ) → void

Exclui uma origem de replicação criada anteriormente, incluindo qualquer progresso de reprodução associado.

pg_replication_origin_oid ( node_name text ) → oid

Procura uma origem de replicação pelo nome e retorna o ID interno. Se não for encontrada nenhuma origem de replicação com esse nome, será retornado NULL.

pg_replication_origin_session_setup ( node_name text ) → void

Marca a sessão corrente como sendo reproduzida a partir da origem especificada, permitindo que o progresso da reprodução seja rastreado. Só pode ser usado se nenhuma origem estiver selecionada no momento. Deve ser usada a função pg_replication_origin_session_reset para desfazer.

pg_replication_origin_session_reset () → void

Cancela os efeitos da função pg_replication_origin_session_setup().

pg_replication_origin_session_is_setup () → boolean

Retorna verdade se uma origem de replicação tiver sido selecionada na sessão corrente.

pg_replication_origin_session_progress ( flush boolean ) → pg_lsn

Retorna o local de reprodução para a origem de replicação selecionada na sessão corrente. O parâmetro flush determina se a transação local correspondente terá a garantia de ter sido descarregada para o disco ou não.

pg_replication_origin_xact_setup ( origin_lsn pg_lsn, origin_timestamp timestamp with time zone ) → void

Marca a transação corrente como repetindo uma transação efetivada no LSN, e no carimbo de data e hora. Só pode ser chamado quando a origem da replicação foi selecionada usando a função pg_replication_origin_session_setup.

pg_replication_origin_xact_reset () → void

Cancela os efeitos da função pg_replication_origin_xact_setup().

pg_replication_origin_advance ( node_name text, lsn pg_lsn ) → void

Define o progresso da replicação de um determinado nó para o local especificado. Isso é útil principalmente para configurar o local inicial ou definir um novo local após alterações de configuração e similares. Esteja ciente de que o uso descuidado desta função pode levar a dados replicados de forma inconsistente.

pg_replication_origin_progress ( node_name text, flush boolean ) → pg_lsn

Retorna o local de reprodução para a origem de replicação fornecida. O parâmetro descarga determina se a transação local correspondente terá a garantia de ter sido descarregada para o disco ou não.

pg_logical_emit_message ( transactional boolean, prefix text, content text [, flush boolean DEFAULT false] ) → pg_lsn

pg_logical_emit_message ( transactional boolean, prefix text, content bytea [, flush boolean DEFAULT false] ) → pg_lsn

Emite uma mensagem de decodificação lógica. Pode ser usada para passar mensagens genéricas para plugins de decodificação lógica através do WAL. O parâmetro transactional determina se a mensagem deve fazer parte da transação corrente, ou se deve ser escrita imediatamente e decodificada assim que o decodificador lógico ler o registro. O parâmetro prefix é um prefixo textual que pode ser usado por plugins de decodificação lógica para reconhecer facilmente as mensagens de interesse para eles. O parâmetro content é o conteúdo da mensagem, fornecido em forma de texto ou binário. O parâmetro flush (definido por padrão como false) controla se a mensagem é descarregada imediatamente para o WAL ou não. flush não tem efeito com transactional, uma vez o registro do WAL da mensagem é descarregado juntamente com a transação.

pg_sync_replication_slots () → void

Sincroniza os encaixes de replicação de dormir failover lógico do servidor primário com o servidor em espera. Esta função só pode ser executada no servidor em espera. Os encaixes sincronizados temporários, se houver, não podem ser usados ​​para decodificação lógica, devendo ser descartados após a promoção. Veja Seção 47.2.3 para obter detalhes. Note que esta função destina-se principalmente a fins de teste e depuração, devendo ser usada com cautela. Além disso, esta função não poderá ser executada se sync_replication_slots estiver habilitado e o processo slotsync já estiver em execução para realizar a sincronização de encaixes.

Cuidado

Se, após a execução da função , hot_standby_feedback for desativado no servidor em espera, ou o encaixe físico configurado em primary_slot_name for excluído, então será possível que as linhas necessárias do encaixe sincronizado sejam excluídas pelo processo VACUUM no servidor primário, resultando na invalidação do encaixe sincronizado.


9.28.7. Funções de gerenciamento de objetos de banco de dados #

As funções descritas na Tabela 9.102 calculam o uso do espaço em disco de objetos de banco de dados, ou auxiliam na apresentação ou compreensão dos resultados de uso. Os resultados bigint são medidos em bytes. Se for passado para uma destas funções um OID que não representa um objeto existente, será retornado NULL.

Tabela 9.102. Funções de tamanho de objeto de banco de dados

Função

Descrição

pg_column_size ( "any" ) → integer

Mostra o número de bytes usados para armazenar qualquer valor de dados individual. Se aplicado diretamente a um valor de coluna da tabela, reflete qualquer compressão que tenha sido feita.

pg_column_compression ( "any" ) → text

Mostra o algoritmo de compressão usado para comprimir o valor de comprimento variável individual. Retorna NULL se o valor não estiver comprimido.

pg_column_toast_chunk_id ( "any" ) → oid

Mostra o chunk_id de um valor TOAST (muito grande) armazenado em disco. Retorna NULL se o valor não for um TOAST ou não estiver no disco. Veja a Seção 66.2 para obter mais informações sobre TOAST.

pg_database_size ( name ) → bigint

pg_database_size ( oid ) → bigint

Calcula o espaço total em disco usado pelo banco de dados com o nome ou OID especificado. Para usar esta função é necessário possuir o privilégio CONNECT no banco de dados especificado (que é concedido por padrão), ou possuir os privilégios da role (função de banco de dados) pg_read_all_stats.

pg_indexes_size ( regclass ) → bigint

Calcula o espaço total em disco usado pelos índices anexados à tabela especificada.

pg_relation_size ( relation regclass [, fork text ] ) → bigint

Calcula o espaço em disco usado por uma bifurcação (fork) da relação especificada. (Note que, para a maioria dos propósitos, é mais conveniente usar as funções de nível mais alto pg_total_relation_size ou pg_table_size, que somam os tamanhos de todas as bifurcações.) Com um argumento, retorna o tamanho da bifurcação de dados principal da relação. Pode ser fornecido o segundo argumento para especificar qual bifurcação será examinada:

  • main retorna o tamanho da bifurcação de dados principal da relação.

  • fsm retorna o tamanho do Mapa de Espaço Livre (Free Space Map) (veja a Seção 66.3) associada com a relação.

  • vm retorna o tamanho do Mapa de Visibilidade (Visibility Map) (veja a Seção 66.4) associada com a relação.

  • init retorna o tamanho da bifurcação de inicialização, se houver, associada à relação.

pg_size_bytes ( text ) → bigint

Converte o tamanho em formato legível por humanos (como retornado pela função pg_size_pretty) em bytes. As unidades válidas são bytes, B, kB, MB, GB, TB e PB.

pg_size_pretty ( bigint ) → text

pg_size_pretty ( numeric ) → text

Converte o tamanho em bytes em um formato mais facilmente legível por humanos com unidades de tamanho (bytes, kB, MB, GB, TB, ou PB conforme seja apropriado). Note que as unidades são potências de 2 em vez de potências de 10, então 1kB são 1024 bytes, 1MB é 10242 = 1048576 bytes, e assim por diante.

pg_table_size ( regclass ) → bigint

Calcula o espaço em disco usado pela tabela especificada, excluindo os índices (mas incluindo sua tabela TOAST, se houver, mapa de espaço livre e mapa de visibilidade).

pg_tablespace_size ( name ) → bigint

pg_tablespace_size ( oid ) → bigint

Calcula o espaço total em disco usado pelo espaço de tabelas com o nome ou OID especificado. Para usar esta função, deve-se ter o privilégio CREATE no espaço de tabelas especificado, ou tiver os privilégios da role (função de banco de dados) pg_read_all_stats, a menos que seja o espaço de tabelas padrão para o banco de dados corrente.

pg_total_relation_size ( regclass ) → bigint

Calcula o espaço total em disco usado pela tabela especificada, incluindo todos os índices e dados TOAST (muito grandes). O resultado equivale a pg_table_size + pg_indexes_size.


As funções descritas acima que operam em tabelas ou índices aceitam um argumento do tipo de dados regclass, que é apenas o OID da tabela ou índice no catálogo do sistema pg_class. Entretanto, não é necessário procurar o OID manualmente, porque o conversor de entrada do tipo de dados regclass faz este trabalho por você. Veja a Seção 8.19 para obter mais detalhes.

As funções descritas na Tabela 9.103 ajudam a identificar os arquivos em disco específicos associados a objetos de banco de dados.

Tabela 9.103. Funções de localização de objeto do banco de dados

Função

Descrição

pg_relation_filenode ( relation regclass ) → oid

Retorna o número do filenode atribuído atualmente à relação especificada. O filenode é o componente base do(s) nome(s) de arquivo usado(s) para a relação (veja a Seção 66.1 para obter mais informações). Para a maioria das relações o resultado é idêntico a pg_class.relfilenode, mas para determinados catálogos do sistema relfilenode é zero, e esta função deve ser usada para obter o valor correto. A função retorna NULL se for passada uma relação que não possui armazenamento, como uma visão.

pg_relation_filepath ( relation regclass ) → text

Retorna o nome do caminho completo do arquivo (em relação ao diretório de dados do agrupamento de banco de dados, PGDATA) da relação.

pg_filenode_relation ( tablespace oid, filenode oid ) → regclass

Retorna o OID de uma relação, dado o OID do espaço de tabelas e o nó de arquivo onde está armazenada. Este é essencialmente o mapeamento inverso da função pg_relation_filepath. Para uma relação no espaço de tabelas padrão do banco de dados, o espaço de tabelas pode ser especificado como zero. Retorna NULL se nenhuma relação no banco de dados corrente estiver associada aos valores fornecidos, ou se estiver lidando com uma relação temporária.


A Tabela 9.104 descreve as funções usadas para gerenciar ordenações (collations).

Tabela 9.104. Funções de gerenciamento de ordenações

Função

Descrição

pg_collation_actual_version ( oid ) → text

Retorna a versão corrente do objeto de ordenação, conforme está instalado no sistema operacional. Se for diferente do valor de pg_collation.collversion, então os objetos que dependem da ordenação podem precisar ser reconstruídos. Veja também ALTER COLLATION.

pg_database_collation_actual_version ( oid ) → text

Retorna a versão corrente da ordenação do banco de dados, conforme está instalada no sistema operacional. Se for diferente do valor de pg_database.datcollversion, então os objetos que dependem da ordenação podem precisar ser reconstruídos. Veja também ALTER DATABASE.

pg_import_system_collations ( schema regnamespace ) → integer

Adiciona ordenações ao catálogo do sistema pg_collation com base em todas as localidades encontradas no sistema operacional. Isto é o que o initdb usa; veja a Seção 23.2.2 para obter mais detalhes. Se forem instaladas localidades adicionais no sistema operacional posteriormente, esta função poderá ser executada novamente para adicionar ordenações para as novas localidades. As localidades que correspondem às entradas existentes em pg_collation serão ignoradas. (Mas os objetos de ordenação baseados em localidades que não estão mais presentes no sistema operacional não são removidos por esta função.) O parâmetro schema normalmente é pg_catalog, mas isto não é um requisito; as ordenações também podem ser instalados em algum outro esquema. Esta função retorna o número de novos objetos de ordenação criados. O uso desta função é restrito a superusuários.


A Tabela 9.105 descreve as funções usadas para manusear estatísticas. Estas funções não podem ser executadas durante a recuperação.

Atenção

É provável que as alterações feitas por estas funções de manuseio de estatística sejam sobrescritas pelo autovacuum (ou por um VACUUM ou ANALYZE manual) devendo por isto serem consideradas temporárias.

Tabela 9.105. Funções de manuseio de estatísticas de objetos de banco de dados

Função

Descrição

pg_restore_relation_stats ( VARIADIC kwargs "any" ) → boolean

Atualiza as estatísticas no nível da tabela. Normalmente, estas estatísticas são coletadas automaticamente ou atualizadas como parte do VACUUM ou do ANALYZE, portanto não é necessário chamar esta função. Entretanto, esta função é útil após uma restauração para permitir que o otimizador escolha planos melhores se o comando ANALYZE ainda não tiver sido executado.

As estatísticas rastreadas podem mudar de versão para versão, portanto, os argumentos são passados ​​em pares de argname e argvalue na forma:

SELECT pg_restore_relation_stats(
    'arg1name', 'arg1value'::arg1type,
    'arg2name', 'arg2value'::arg2type,
    'arg3name', 'arg3value'::arg3type);

Por exemplo, para definir os valores de relpages e reltuples para a tabela mytable:

SELECT pg_restore_relation_stats(
    'schemaname', 'myschema',
    'relname',    'mytable',
    'relpages',   173::integer,
    'reltuples',  10000::real);

Os argumentos schemaname e relname são requeridos e especificam a tabela. Os outros argumentos são os nomes e valores de estatísticas correspondentes a determinadas colunas em pg_class. As estatísticas para relação com suporte no momento são relpages com um valor do tipo de dados integer, reltuples com um valor do tipo de dados real, relallvisible com um valor do tipo de dados integer e relallfrozen com um valor do tipo de dados integer.

Além disso, esta função aceita o argumento version do tipo de dados integer, que especifica a versão do servidor de onde as estatísticas foram originadas. Espera-se que isto seja útil na migração de estatísticas de versões mais antigas de PostgreSQL.

Erros menores são relatados como WARNING, ignorados, e as estatísticas restantes serão restauradas. Se todas as estatísticas especificadas forem restauradas com sucesso, é retornado true, caso contrário false.

Quem chama a função deve ter o privilégio MAINTAIN na tabela ou ser o dono do banco de dados.

pg_clear_relation_stats ( schemaname text, relname text ) → void

Limpa as estatísticas no nível de tabela para a relação especificada, como se a tabela tivesse sido criada recentemente.

Quem chama a função deve ter o privilégio MAINTAIN na tabela ou ser o dono do banco de dados.

pg_restore_attribute_stats ( VARIADIC kwargs "any" ) → boolean

Cria ou atualiza as estatísticas em nível de coluna. Normalmente, estas estatísticas são coletadas automaticamente ou atualizadas como parte do VACUUM ou do ANALYZE, portanto não é necessário chamar esta função. Entretanto, esta função é útil após uma restauração para permitir que o otimizador escolha planos melhores se o comando ANALYZE ainda não tiver sido executado.

As estatísticas rastreadas podem mudar de versão para versão, portanto, os argumentos são passados ​​em pares de argname e argvalue na forma:

SELECT pg_restore_attribute_stats(
    'arg1name', 'arg1value'::arg1type,
    'arg2name', 'arg2value'::arg2type,
    'arg3name', 'arg3value'::arg3type);

Por exemplo, para definir os valores de avg_width e null_frac para o atributo col1 da tabela mytable:

SELECT pg_restore_attribute_stats(
    'schemaname', 'myschema',
    'relname',    'mytable',
    'attname',    'col1',
    'inherited',  false,
    'avg_width',  125::integer,
    'null_frac',  0.5::real);

Os argumentos requeridos são schemaname e relname com um valor do tipo de dados text que especificam a tabela; também attname com um valor do tipo de dados text ou attnum com um valor do tipo de dados smallint, que especifica a coluna; e inherited, que especifica se as estatísticas incluem valores de tabelas filhas. Os outros argumentos são os nomes e valores de estatísticas correspondentes a colunas em pg_stats.

Além disso, esta função aceita o argumento version do tipo de dados integer, que especifica a versão do servidor de onde as estatísticas foram originadas. Espera-se que isto seja útil na migração de estatísticas de versões mais antigas de PostgreSQL.

Erros menores são relatados como WARNING, ignorados, e as estatísticas restantes serão restauradas. Se todas as estatísticas especificadas forem restauradas com sucesso, é retornado true, caso contrário

Quem chama a função deve ter o privilégio MAINTAIN na tabela ou ser o dono do banco de dados.

pg_clear_attribute_stats ( schemaname text, relname text, attname text, inherited boolean ) → void

Limpa as estatísticas no nível de coluna para a relação e o atributo especificados, como se a tabela tivesse sido criada recentemente.

Quem chama a função deve ter o privilégio MAINTAIN na tabela ou ser o dono do banco de dados.


A Tabela 9.106 descreve as funções que fornecem informações sobre a estrutura de tabelas particionadas.

Tabela 9.106. Funções de informação de particionamento

Função

Descrição

pg_partition_tree ( regclass ) → setof record ( relid regclass, parentrelid regclass, isleaf boolean, level integer )

Lista as tabelas, ou índices na árvore de partição da tabela particionada, ou índice particionado, com uma linha para cada partição. As informações fornecidas incluem o OID da partição, o OID de seu pai imediato, um valor booleano informando se a partição é uma folha e um inteiro informando seu nível na hierarquia. O valor do nível é 0 para a tabela ou índice de entrada, 1 para suas partições filhas imediatas, 2 para suas partições, e assim por diante. Não retorna nenhuma linha se a relação não existir, ou não for uma partição ou tabela particionada.

pg_partition_ancestors ( regclass ) → setof regclass

Lista as relações ancestrais da partição fornecida, incluindo a própria relação. Não retorna nenhuma linha se a relação não existir, ou não for uma partição ou tabela particionada.

pg_partition_root ( regclass ) → regclass

Retorna o ancestral mais alto da árvore de partição à qual a relação determinada pertence. Retorna NULL se a relação não existir, ou não for uma partição ou tabela particionada.


Por exemplo, para verificar o tamanho total dos dados contidos na tabela particionada measurement, pode ser usada a seguinte consulta:

SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size
  FROM pg_partition_tree('measurement');

9.28.8. Funções de manutenção de índice #

A Tabela 9.107 descreve as funções disponíveis para tarefas de manutenção de índice. (Note que estas tarefas de manutenção são normalmente feitas automaticamente pelo autovacuum; o uso destas funções só é necessário em casos especiais.) Estas funções não podem ser executadas durante a recuperação. O uso destas funções é restrito aos superusuários e ao dono do índice especificado.

Tabela 9.107. Funções de manutenção de índice

Função

Descrição

brin_summarize_new_values ( index regclass ) → integer

Verifica o índice BRIN especificado para encontrar intervalos de páginas na tabela base que não estão resumidos atualmente pelo índice; para qualquer intervalo desse tipo, é criada uma tupla de índice de resumo varrendo essas páginas da tabela. Retorna o número de novos resumos de intervalo de páginas que foram inseridos no índice.

brin_summarize_range ( index regclass, blockNumber bigint ) → integer

Resume o intervalo de páginas que cobre o bloco fornecido, se ainda não estiver resumido. É como a função brin_summarize_new_values, exceto por processar apenas o intervalo de páginas que cobre o número de bloco de tabela fornecido.

brin_desummarize_range ( index regclass, blockNumber bigint ) → void

Remove a tupla de índice BRIN que resume o intervalo de páginas que cobre o bloco de tabela fornecido, se houver um.

gin_clean_pending_list ( index regclass ) → bigint

Limpa a lista pendente do índice GIN especificado movendo as entradas nela, em massa, para a estrutura de dados GIN principal. Retorna o número de páginas removidas da lista pendente. Se o argumento for um índice GIN construído com a opção fastupdate desativada, nenhuma limpeza acontece, e o resultado é zero, porque o índice não tem uma lista pendente. Veja Seção 65.4.4.1 e a Seção 65.4.5 para obter detalhes sobre a lista pendente e a opção fastupdate.


9.28.9. Funções genéricas para acesso a arquivo #

As funções mostradas na Tabela 9.108 fornecem acesso nativo aos arquivos na máquina que hospeda o servidor. Somente os arquivos dentro do diretório do agrupamento de banco de dados e do log_directory podem ser acessados, a menos que o usuário seja um superusuário, ou tenha a função de banco de dados pg_read_server_files concedida. Use um caminho relativo para arquivos no diretório do agrupamento, e um caminho que corresponda à definição da configuração log_directory para arquivos de log.

Note que conceder aos usuários o privilégio EXECUTE para a função pg_read_file(), ou funções relacionadas, permite que estes leiam qualquer arquivo no servidor que o processo servidor do banco de dados possa ler; estas funções ignoram todas as verificações de privilégio no banco de dados, significando que, por exemplo, um usuário com este acesso pode ler o conteúdo da tabela pg_authid, onde as informações de autenticação estão armazenadas, bem como quaisquer dados de tabela no banco de dados. Portanto, conceder acesso a estas funções deve ser considerado cuidadosamente.

Ao conceder privilégios para estas funções, observe que as entradas da tabela que mostram parâmetros opcionais são, em sua maioria, implementadas como várias funções físicas com listas de parâmetros diferentes. O privilégio deve ser concedido separadamente para cada função deste tipo, caso ela deva ser utilizada. O comando \df do psql Pode ser útil para verificar quais são as assinaturas reais das funções.

Algumas dessas funções usam o parâmetro opcional ausente_ok, que determina o comportamento quando o arquivo ou diretório não existe. Se for true, a função retorna NULL, ou um conjunto de resultados vazio, conforme seja apropriado. Se for false é gerado um erro. (As condições de falha que não sejam arquivo não encontrado são relatadas como erros em qualquer caso.) O padrão é false.

Tabela 9.108. Funções genéricas para acesso a arquivo

Função

Descrição

pg_ls_dir ( dirname text [, missing_ok boolean, include_dot_dirs boolean ] ) → setof text

Retorna os nomes de todos os arquivos (e diretórios e outros arquivos especiais) no diretório especificado. O parâmetro include_dot_dirs indica se . e .. devem ser incluídos no conjunto de resultados; o padrão é excluí-los. Incluí-los pode ser útil quando missing_ok for true, para distinguir um diretório vazio de um diretório inexistente.

Esta função é restrita a superusuários por padrão, mas outros usuários podem receber o privilégio EXECUTE para executar esta função.

pg_ls_logdir () → setof record ( name text, size bigint, modification timestamp with time zone )

Retorna o nome, tamanho e hora da última modificação (mtime) de cada arquivo comum no diretório de log do servidor. Nomes de arquivo que começam com ponto, diretórios e outros arquivos especiais são excluídos.

Esta função é restrita a superusuários e roles (funções de banco de dados) com os privilégios da role pg_monitor por padrão, mas outros usuários podem receber a permissão EXECUTE para executar esta função.

pg_ls_waldir () → setof record ( name text, size bigint, modification timestamp with time zone )

Retorna o nome, o tamanho e a hora da última modificação (mtime) de cada arquivo comum no diretório de registro de transações (WAL) do servidor. Nomes de arquivo que começam com ponto, diretórios e outros arquivos especiais são excluídos.

Esta função é restrita a superusuários e roles (funções de banco de dados) com os privilégios da role pg_monitor por padrão, mas outros usuários podem receber a permissão EXECUTE para executar esta função.

pg_ls_logicalmapdir () → setof record ( name text, size bigint, modification timestamp with time zone )

Retorna o nome, o tamanho e a hora da última modificação (mtime) de cada arquivo comum no diretório pg_logical/mappings do servidor. Nomes de arquivo que começam com ponto, diretórios e outros arquivos especiais são excluídos.

Esta função é restrita a superusuários e roles (funções de banco de dados) com os privilégios da role pg_monitor por padrão, mas outros usuários podem receber a permissão EXECUTE para executar esta função.

pg_ls_logicalsnapdir () → setof record ( name text, size bigint, modification timestamp with time zone )

Retorna o nome, o tamanho e a hora da última modificação (mtime) de cada arquivo comum no diretório pg_logical/snapshots do servidor. Nomes de arquivo que começam com ponto, diretórios e outros arquivos especiais são excluídos.

Esta função é restrita a superusuários e roles (funções de banco de dados) com os privilégios da role pg_monitor por padrão, mas outros usuários podem receber a permissão EXECUTE para executar esta função.

pg_ls_replslotdir ( slot_name text ) → setof record ( name text, size bigint, modification timestamp with time zone )

Retorna o nome, o tamanho e a hora da última modificação (mtime) de cada arquivo comum no diretório pg_replslot/slot_name do servidor, onde slot_name é o nome do encaixe de replicação fornecido como entrada da função. Nomes de arquivo que começam com ponto, diretórios e outros arquivos especiais são excluídos.

Esta função é restrita a superusuários e roles (funções de banco de dados) com os privilégios da role pg_monitor por padrão, mas outros usuários podem receber a permissão EXECUTE para executar esta função.

pg_ls_summariesdir () → setof record ( name text, size bigint, modification timestamp with time zone )

Retorna o nome, o tamanho e a hora da última modificação (mtime) de cada arquivo comum no diretório de resumos do WAL do servidor (pg_wal/summaries). Nomes de arquivo que começam com ponto, diretórios e outros arquivos especiais são excluídos.

Esta função é restrita a superusuários e roles (funções de banco de dados) com os privilégios da role pg_monitor por padrão, mas outros usuários podem receber a permissão EXECUTE para executar esta função.

pg_ls_archive_statusdir () → setof record ( name text, size bigint, modification timestamp with time zone )

Retorna o nome, o tamanho e a hora da última modificação (mtime) de cada arquivo comum no diretório de status de arquivamento do WAL do servidor (pg_wal/archive_status). Nomes de arquivo que começam com ponto, diretórios e outros arquivos especiais são excluídos.

Esta função é restrita a superusuários e roles (funções de banco de dados) com os privilégios da role pg_monitor por padrão, mas outros usuários podem receber a permissão EXECUTE para executar esta função.

pg_ls_tmpdir ( [ tablespace oid ] ) → setof record ( name text, size bigint, modification timestamp with time zone )

Retorna o nome, o tamanho e a hora da última modificação (mtime) de cada arquivo comum no diretório de arquivos temporários para o tablespace especificado. Se não for fornecido o parâmetro tablespace, será examinado o espaço de tabelas pg_default. Nomes de arquivo que começam com ponto, diretórios e outros arquivos especiais são excluídos.

Esta função é restrita a superusuários e roles (funções de banco de dados) com os privilégios da role pg_monitor por padrão, mas outros usuários podem receber a permissão EXECUTE para executar esta função.

pg_read_file ( filename text [, offset bigint, length bigint ] [, missing_ok boolean ] ) → text

Retorna todo ou parte de um arquivo de texto, começando no byte especificado pelo offset, e retornando no máximo length bytes (menos se o final do arquivo for atingido primeiro). Se o deslocamento for negativo, é relativo ao final do arquivo. Se offset e length forem omitidos, será retornado todo o arquivo. Os bytes lidos do arquivo são interpretados como uma cadeia de caracteres na codificação do banco de dados; será gerado um erro se não forem válidos para esta codificação.

Esta função é restrita a superusuários por padrão, mas outros usuários podem receber o privilégio EXECUTE para executar esta função.

pg_read_binary_file ( filename text [, offset bigint, length bigint ] [, missing_ok boolean ] ) → bytea

Retorna todo ou parte de um arquivo. Esta função é idêntica à função pg_read_file, exceto por poder ler dados binários arbitrários, retornando o resultado como bytea e não text; consequentemente, nenhuma verificação de codificação é executada.

Esta função é restrita a superusuários por padrão, mas outros usuários podem receber o privilégio EXECUTE para executar esta função.

Em combinação com a função convert_from, esta função pode ser usada para ler um arquivo de texto em uma codificação especificada, e converter para a codificação do banco de dados:

SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8');

pg_stat_file ( filename text [, missing_ok boolean ] ) → record ( size bigint, access timestamp with time zone, modification timestamp with time zone, change timestamp with time zone, creation timestamp with time zone, isdir boolean )

Retorna um registro contendo o tamanho do arquivo, carimbo de data e hora do último acesso, carimbo de data e hora da última modificação, carimbo de data e hora da última alteração de status do arquivo (somente nas plataformas Unix), carimbo de data e hora de criação do arquivo (somente no Windows), e um sinalizador indicando se é um diretório.

Esta função é restrita a superusuários por padrão, mas outros usuários podem receber o privilégio EXECUTE para executar esta função.


9.28.10. Funções de bloqueio consultivo #

As funções descritas na Tabela 9.109 gerenciam bloqueios consultivos. Para obter detalhes sobre o uso adequado destas funções, veja a Seção 13.3.5.

Todas estas funções devem ser usadas para bloquear recursos definidos pela aplicação, que podem ser identificados por um único valor de chave de 64 bits, ou dois valores de chave de 32 bits (observe que estes dois espaços de chave não se sobrepõem). Se outra sessão já possuir um bloqueio conflitante no mesmo identificador de recurso, as funções aguardarão até que o recurso fique disponível, ou retornarão um resultado false, conforme seja apropriado para a função. Os bloqueios podem ser compartilhados ou exclusivos: um bloqueio compartilhado não entra em conflito com outros bloqueios compartilhados no mesmo recurso, apenas com bloqueios exclusivos. Os bloqueios podem ser feito no nível de sessão (para serem mantidos até serem liberados, ou a sessão terminar), ou no nível de transação (para serem mantidos até o término da transação corrente; não há previsão para liberação manual). São empilhadas várias solicitações de bloqueio no nível de sessão, de modo que, se o mesmo identificador de recurso for bloqueado três vezes, será necessário haver três solicitações de desbloqueio para liberar os recurso antes do final da sessão.

Tabela 9.109. Funções de bloqueio consultivo

Função

Descrição

pg_advisory_lock ( key bigint ) → void

pg_advisory_lock ( key1 integer, key2 integer ) → void

Obtém um bloqueio consultivo exclusivo no nível de sessão, aguardando se for necessário.

pg_advisory_lock_shared ( key bigint ) → void

pg_advisory_lock_shared ( key1 integer, key2 integer ) → void

Obtém um bloqueio consultivo compartilhado no nível de sessão, aguardando se for necessário.

pg_advisory_unlock ( key bigint ) → boolean

pg_advisory_unlock ( key1 integer, key2 integer ) → boolean

Libera o bloqueio consultivo exclusivo no nível de sessão adquirido anteriormente. Retorna true se o bloqueio for liberado com sucesso. Se o bloqueio não estiver sendo mantido, é retornado false e, além disso, será relatado um aviso SQL pelo servidor.

pg_advisory_unlock_all () → void

Libera todos os bloqueios consultivos no nível de sessão mantidos pela sessão corrente. (Esta função é chamada implicitamente no final da sessão, mesmo se o cliente se desconectar de forma deselegante.)

pg_advisory_unlock_shared ( key bigint ) → boolean

pg_advisory_unlock_shared ( key1 integer, key2 integer ) → boolean

Libera um bloqueio consultivo compartilhado no nível de sessão adquirido anteriormente. Retorna true se o bloqueio for liberado com sucesso. Se o bloqueio não estiver sendo mantido, é retornado false e, além disso, será relatado um aviso SQL pelo servidor.

pg_advisory_xact_lock ( key bigint ) → void

pg_advisory_xact_lock ( key1 integer, key2 integer ) → void

Obtém um bloqueio consultivo exclusivo no nível de transação, aguardando se for necessário.

pg_advisory_xact_lock_shared ( key bigint ) → void

pg_advisory_xact_lock_shared ( key1 integer, key2 integer ) → void

Obtém um bloqueio consultivo compartilhado no nível de transação, aguardando se for necessário.

pg_try_advisory_lock ( key bigint ) → boolean

pg_try_advisory_lock ( key1 integer, key2 integer ) → boolean

Obtém um bloqueio consultivo exclusivo no nível de sessão, se estiver disponível. Esta função obterá o bloqueio imediatamente e retornará true, ou retornará false sem esperar, se o bloqueio não puder ser adquirido imediatamente.

pg_try_advisory_lock_shared ( key bigint ) → boolean

pg_try_advisory_lock_shared ( key1 integer, key2 integer ) → boolean

Obtém um bloqueio consultivo compartilhado no nível de sessão, se estiver disponível. Esta função obterá o bloqueio imediatamente e retornará true, ou retornará false sem esperar, se o bloqueio não puder ser adquirido imediatamente.

pg_try_advisory_xact_lock ( key bigint ) → boolean

pg_try_advisory_xact_lock ( key1 integer, key2 integer ) → boolean

Obtém um bloqueio consultivo exclusivo no nível de transação, se estiver disponível. Esta função obterá o bloqueio imediatamente e retornará true, ou retornará false sem esperar, se o bloqueio não puder ser adquirido imediatamente.

pg_try_advisory_xact_lock_shared ( key bigint ) → boolean

pg_try_advisory_xact_lock_shared ( key1 integer, key2 integer ) → boolean

Obtém um bloqueio consultivo compartilhado no nível de transação, se estiver disponível. Esta função obterá o bloqueio imediatamente e retornará true, ou retornará false sem esperar, se o bloqueio não puder ser adquirido imediatamente.