9.28. Funções de administração do sistema #
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.
|