pg_amcheck — verifica se um ou mais bancos de dados do PostgreSQL está corrompido
pg_amcheck [opção...] [nome_do_banco_de_dados]
O utilitário pg_amcheck dá suporte à execução das funções de verificação de corrupção de amcheck, em um ou mais bancos de dados, com opções para selecionar quais esquemas, tabelas e índices verificar, quais tipos de verificação executar, e se as verificações devem ser executadas em paralelo e, em caso afirmativo, o número de conexões paralelas a serem estabelecidas e usadas.
No momento, apenas relações de tabelas comuns e tabelas TOAST, visões materializadas, sequências e índices de Árvore-B têm suporte. Os outros tipos de relação são ignorados silenciosamente.
Se for especificado o nome_do_banco_de_dados,
deverá ser o nome do único banco de dados a ser verificado, e
nenhuma outra opção de seleção de banco de dados deverá estar presente.
Caso contrário, se houver opções de seleção de banco de dados,
todos os bancos de dados correspondentes serão verificados.
Se estas opções não estiverem presentes, será verificado o banco de
dados padrão.
As opções de seleção de banco de dados incluem
--all, --database e
--exclude-database.
As opções também incluem
--relation, --exclude-relation,
--table, --exclude-table,
--index, e --exclude-index,
mas somente quando estas opções são usadas com um padrão de três
partes (por exemplo, meubd*.meuesquema*.minharel*).
Finalmente, as opções incluem
--schema e --exclude-schema,
quando as opções são usadas com um padrão de duas partes
(por exemplo, meubd*.meuesquema*).
O nome_do_banco_de_dados também pode ser uma
cadeia de caracteres de conexão.
As seguintes opções de linha de comando controlam o que é verificado:
-a--all
Verifica todos os bancos de dados, exceto os excluídos por
--exclude-database.
-d padrão--database=padrão
Verifica os bancos de dados correspondentes ao
padrão,
especificado, exceto os excluídos por --exclude-database.
Esta opção pode ser especificada mais de uma vez.
-D padrão--exclude-database=padrão
Exclui os bancos de dados correspondentes ao
padrão
especificado.
Esta opção pode ser especificada mais de uma vez.
-i padrão--index=padrão
Verifica os índices correspondentes ao
padrão
especificado, a menos que sejam excluídos de outra forma.
Esta opção pode ser especificada mais de uma vez.
Esta opção é semelhante à opção --relation,
exceto que se aplica apenas a índices, e não a outros tipos
de relações.
-I padrão--exclude-index=padrão
Exclui os índices correspondentes ao
padrão
especificado.
Esta opção pode ser especificada mais de uma vez.
Esta opção é semelhante à opção --exclude-relation,
exceto que se aplica apenas a índices, e não a outros tipos
de relações.
-r padrão--relation=padrão
Verifica as relações correspondentes ao
padrão
especificado, a menos que sejam excluídos de outra forma.
Esta opção pode ser especificada mais de uma vez.
Os padrões podem ser não qualificados como, por exemplo,
myrel*,
ou podem ser qualificados pelo esquema como, por exemplo,
meuesquema*.minharel*,
ou qualificado pelo banco de dados e pelo esquema como,
por exemplo, meubd*.meuesquema*.minharel*.
Um padrão qualificado pelo banco de dados irá adicionar os
bancos de dados correspondentes à lista de bancos de dados
a serem verificados.
-R padrão--exclude-relation=padrão
Exclui as relações correspondentes ao
padrão
especificado.
Esta opção pode ser especificada mais de uma vez.
Assim como na opção --relation, o
padrão
pode ser não qualificado, qualificado pelo esquema,
ou qualificado pelo banco de dados e pelo esquema.
-s padrão--schema=padrão
Verifica tabelas e índices em esquemas correspondentes ao
padrão
especificado, a menos que sejam excluídos de outra forma.
Esta opção pode ser especificada mais de uma vez.
Para selecionar apenas tabelas em esquemas correspondentes
a um determinado padrão, deve-se considerar usar algo como
--table=PAD_ESQUEMA.* --no-dependent-indexes.
Para selecionar apenas índices, deve-se considerar usar algo como
--index=PAD_ESQUEMA.*
(onde PAD_ESQUEMA é um padrão de esquema).
O padrão de esquema pode ser qualificado pelo banco de dados.
Por exemplo, pode-se escrever
--schema=meubd*.meuesquema* para selecionar
esquemas correspondentes a meuesquema*
em bancos de dados correspondentes a meubd*.
-S padrão--exclude-schema=padrão
Exclui tabelas e índices em esquemas correspondentes ao
padrão
especificado.
Esta opção pode ser especificada mais de uma vez.
Assim como na opção --schema, o padrão pode
ser qualificado pelo banco de dados.
-t padrão--table=padrão
Verifica as tabelas correspondentes ao
padrão
especificado, a menos que sejam excluídas de outra forma.
Esta opção pode ser especificada mais de uma vez.
Esta opção é semelhante à opção --relation,
exceto que se aplica apenas a tabelas, visões materializadas
e sequências, e não a índices.
-T padrão--exclude-table=padrão
Exclui as tabelas correspondentes ao
padrão
especificado.
Esta opção pode ser especificada mais de uma vez.
Esta opção é semelhante à opção --exclude-relation,
exceto que se aplica apenas a tabelas, visões materializadas
e sequências, e não a índices.
--no-dependent-indexes
Por padrão, se uma tabela for verificada, todos os índices
Árvore-B dessa tabela também serão verificados, mesmo que não
sejam explicitamente selecionados por uma opção como
--index ou --relation.
Esta opção suprime este comportamento.
--no-dependent-toast
Por padrão, se uma tabela for verificada, sua tabela
TOAST, se houver, também será verificada,
mesmo que não seja explicitamente selecionada por uma opção como
--table ou --relation .
Esta opção suprime este comportamento.
--no-strict-names
Por padrão, se um argumento para --database,
--table, --index,
ou --relation não corresponder a nenhum
objeto, ocorrerá um erro fatal.
Esta opção rebaixa este erro para uma advertência.
As seguintes opções de linha de comando controlam a verificação de tabelas:
--exclude-toast-pointersPor padrão, sempre que é encontrado um ponteiro para TOAST em uma tabela, é executada uma pesquisa para garantir que o ponteiro faça referência a uma entrada aparentemente válida na tabela TOAST. Esta verificação pode ser bastante lenta, e pode ser usada esta opção para ignorá-la.
--on-error-stopApós relatar todas as corrupções existentes na primeira página da tabela onde a corrupção foi encontrada, interrompa o processamento dessa relação de tabela, e siga para a próxima tabela ou índice.
Note que a verificação do índice é sempre interrompida após a primeira página corrompida. Esta opção só tem significado para as relações de tabela.
--skip=escolha
Se for escolhido all-frozen,
as verificações de corrupção de tabela irão ignorar, em todas as
tabelas, as páginas marcadas como todas congeladas.
Se for escolhido all-visible,
as verificações de corrupção de tabela irão ignorar, em todas as
tabelas, as páginas marcadas como todas visíveis.
Por padrão, nenhuma página é ignorada.
Isto pode ser feito escolhendo none,
mas como este é o padrão, não precisa ser mencionado.
--startblock=bloco
Começa a verificação no número de bloco especificado.
Ocorrerá um erro se a relação de tabela que está sendo
verificada tiver menos que este número de blocos.
Esta opção não se aplica a índices, e provavelmente só é útil
ao verificar uma única relação de tabela.
Veja em --endblock mais advertências.
--endblock=bloco
Termina a verificação no número de bloco especificado.
Ocorrerá um erro se a relação de tabela que está sendo
verificada tiver menos que este número de blocos.
Esta opção não se aplica a índices, e provavelmente só é útil
ao verificar uma única relação de tabela.
Se forem verificadas uma tabela normal e uma tabela
TOAST, esta opção se aplicará às duas,
mas os blocos TOAST de número mais alto
ainda poderão ser acessados durante a validação de ponteiros
TOAST, a menos que seja suprimido usando
--exclude-toast-pointers.
As seguintes opções de linha de comando controlam a verificação de índices de Árvore-B:
--checkunique
Para cada índice com restrição de unicidade verificada, verifique
se não há mais de uma entrada duplicada visível no índice usando
a opção checkunique do amcheck.
--heapallindexed
Para cada índice verificado, verifica a presença de todas as
linhas da tabela como registradas no índice usando a opção
heapallindexed de amcheck.
--parent-check
Para cada índice Árvore-B verificado, usa a função
bt_index_parent_check de
amcheck, que executa verificações adicionais
de relacionamentos mãe/filha durante a verificação do índice.
O padrão é usar a função bt_index_check de
amcheck, mas note que o uso da opção
--rootdescend seleciona implicitamente
bt_index_parent_check.
--rootdescend
Para cada índice verificado, reencontra as tuplas no nível de
folha realizando uma nova procura a partir da página raiz para
cada tupla usando a opção rootdescend de
amcheck.
O uso dessa opção também seleciona implicitamente a opção
--parent-check.
Esta forma de verificação foi originalmente escrita para ajudar no desenvolvimento de recursos de índice Árvore-B. Pode ser de uso limitado, ou mesmo inútil, para ajudar a detectar os tipos de corrupção que ocorrem na prática. Também pode fazer com que a verificação de corrupção demore muito mais, e consuma muito mais recursos no servidor.
As verificações extras executadas nos índices Árvore-B quando
é especificada a opção --parent-check, ou a opção
--rootdescend, requerem bloqueios no nível de
relação relativamente fortes.
Estas verificações são as únicas que bloqueiam a modificação
concorrente de dados dos comandos INSERT,
UPDATE e DELETE.
As seguintes opções de linha de comando controlam a conexão com o servidor:
-h nome_do_hospedeiro--host=nome_do_hospedeiroEspecifica o nome de hospedeiro da máquina na qual o servidor está sendo executado. Se começar com uma barra, será usado como o diretório para o soquete de domínio Unix.
-p porta--port=portaEspecifica a porta TCP, ou a extensão de arquivo de soquete de domínio Unix local, na qual o servidor está aguardando conexões.
-U--username=nome_do_usuárioNome de usuário para se conectar como.
-w--no-password
Nunca emite uma solicitação de senha.
Se o servidor exigir autenticação por senha, e uma senha não
estiver disponível por outros meios, como o arquivo
.pgpass, a tentativa de conexão irá falhar.
Esta opção pode ser útil em tarefas em lote e scripts nos quais
nenhum usuário está presente para inserir uma senha.
-W--passwordForça o pg_amcheck solicitar a senha antes de se conectar ao banco de dados.
Esta opção nunca é essencial, porque o
pg_amcheck solicita automaticamente
a senha se o servidor exigir autenticação por senha.
No entanto, o pg_amcheck irá
desperdiçar uma tentativa de conexão ao descobrir que o servidor
pede uma senha.
Em alguns casos vale a pena digitar -W para
evitar a tentativa extra de conexão.
--maintenance-db=nome_do_banco_de_dados
Especifica um banco de dados ou uma
cadeia de caracteres de conexão
a ser usada para descobrir a lista de bancos de dados a serem
verificados.
Se não for usado nem --all, nem qualquer opção
incluindo um padrão de banco de dados, esta conexão não será
necessária e esta opção não fará nada.
Caso contrário, quaisquer parâmetros da cadeia de caracteres
de conexão, diferentes do nome do banco de dados, incluídos no
valor dessa opção, também serão usados ao conectar aos bancos
de dados que estão sendo verificados.
Se esta opção for omitida, o padrão é postgres
ou, se falhar, template1.
Também estão disponíveis outras opções:
-e--echoEscreve em stdout todos os comando SQL enviados para o servidor.
-j número--jobs=número
Usa número conexões concorrentes com
o servidor, ou uma por objeto a ser verificado, o que for menor.
O padrão é usar uma única conexão.
-P--progressMostrar informações de progresso. As informações de progresso incluem o número de relações para as quais a verificação foi concluída, e o tamanho total dessas relações. Também inclui o número total de relações que por fim serão verificadas, e o tamanho estimado dessas relações.
-v--verboseMostra mais mensagens. Em particular, mostra uma mensagem para cada relação que está sendo verificada, e aumenta o nível de detalhe mostrado para erros do servidor.
-V--versionMostra a versão do pg_amcheck, e termina.
--install-missing--install-missing=esquema
Instala todas as extensões que faltam, necessárias para verificar
o(s) banco(s) de dados.
Se ainda não estiverem instalados, os objetos de cada extensão
serão instalados no esquema
especificado, ou se este não for especificado no esquema
pg_catalog.
No momento, a única extensão necessária é amcheck.
-?--helpMostra a ajuda sobre os argumentos da linha de comando do utilitário pg_amcheck, e termina.
O utilitário pg_amcheck, como a maioria dos outros
utilitários do PostgreSQL, também usa as
variáveis de ambiente com suporte pela libpq
(veja Variáveis de ambiente).
A variável de ambiente PG_COLOR especifica se devem
ser usadas cores nas mensagens de diagnóstico.
Os valores possíveis são always,
auto e never.
O utilitário pg_amcheck foi projetado para funcionar com o PostgreSQL 14.0, e posteriores.
Exemplo 92. Exemplo do tradutor
Uso do utilitário pg_amcheck
Neste exemplo, o utilitário pg_amcheck
é usado para verificar a tabela salario_emp
do banco de dados cristina.
Para usar o utilitário pg_amcheck,
primeiro foi necessário instalar o módulo
postgresql-contrib no
Linux Fedora 12,
como visto abaixo:
$sudo apt update$sudo apt upgrade$sudo apt install postgresql-contrib
Em seguida foi necessário instalar a extensão
amcheck, como visto abaixo:
$sudo su postgres$psqlpostgres=# CREATE EXTENSION amcheck; CREATE EXTENSION postgres=# exit
E, por fim, foi executado o utilitário pg_amcheck, como visto abaixo:
$/usr/lib/postgresql/18/bin/pg_amcheck \ > --install-missing \ > --verbose \ > --database=cristina \ > --table=salario_emppg_amcheck: including database "cristina" pg_amcheck: in database "cristina": using amcheck version "1.5" in schema "pg_catalog" pg_amcheck: checking btree index "cristina.pg_toast.pg_toast_33883_index" pg_amcheck: checking heap table "cristina.public.salario_emp" pg_amcheck: checking heap table "cristina.pg_toast.pg_toast_33883"