pg_amcheck

pg_amcheck — verifica se um ou mais bancos de dados do PostgreSQL está corrompido

Sinopse

pg_amcheck [opção...] [nome_do_banco_de_dados]

Descrição

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.

Opções

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-pointers

Por 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-stop

Apó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.

Atenção

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_hospedeiro

Especifica 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=porta

Especifica 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ário

Nome 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
--password

Forç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
--echo

Escreve 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
--progress

Mostrar 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
--verbose

Mostra 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
--version

Mostra 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.

-?
--help

Mostra a ajuda sobre os argumentos da linha de comando do utilitário pg_amcheck, e termina.

Variáveis de ambiente

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.

Notas

O utilitário pg_amcheck foi projetado para funcionar com o PostgreSQL 14.0, e posteriores.

Exemplo

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
$ psql
postgres=# 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_emp
pg_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"


Veja também

amcheck, CREATE EXTENSION