Quando você encontra um erro (bug) no PostgreSQL, queremos saber sobre ele. Seus relatórios de erro desempenham um papel importante para tornar o PostgreSQL mais confiável, porque, mesmo com o maior cuidado, não podemos garantir que todas as partes do PostgreSQL funcionem corretamente em todas as plataformas e em todas as circunstâncias.
As sugestões abaixo têm por objetivo treiná-lo a preencher relatórios de erro que possam ser tratados de forma eficaz. Não é obrigatório segui-las, mas são feitas para serem vantajosas para todos.
Não podemos prometer corrigir todos os erros imediatamente. Se o erro for óbvio, crítico, ou afetar muitos usuários, há uma boa chance de alguém investigá-lo. Também pode acontecer de solicitarmos que você atualize para uma versão mais recente para verificar se o erro ainda acontece. Ou podemos decidir que o erro não pode ser corrigido antes que alguma grande reescrita que possamos estar planejando seja feita. Ou talvez seja simplesmente muito difícil e há coisas mais importantes na agenda. Se você precisar de ajuda imediatamente, considere obter um contrato de suporte comercial.
Antes de relatar um erro, por favor leia e releia a documentação para verificar se realmente pode ser feito o que você está tentando fazer. Se não estiver claro na documentação se pode ou não ser feito, por favor informe isto também; é uma falha na documentação. Se for visto que o programa faz algo diferente do que está dito na documentação, isto também é um erro. Pode incluir, mas não está limitado, as seguintes circunstâncias:
O programa termina com um erro fatal, ou com uma mensagem de erro do sistema operacional que aponta para um problema no programa (um exemplo oposto seria uma mensagem de “disco cheio”, porque você mesmo deve corrigir esse problema).
O programa produz uma saída errada para qualquer entrada dada.
O programa se recusa a aceitar uma entrada válida (conforme definido na documentação).
O programa aceita uma entrada inválida sem mostrar uma mensagem de erro. Porém, tenha em mente que a sua ideia de entrada inválida pode ser a nossa ideia de uma extensão, ou de compatibilidade com a prática tradicional.
O PostgreSQL falha ao compilar, construir ou instalar segundo as instruções nas plataformas com suporte.
Aqui “programa” se refere a qualquer executável, e não apenas ao processo servidor.
Estar lento, ou drenando muitos recursos, não é necessariamente um erro. Leia a documentação, ou peça ajuda em uma das listas de discussão, para otimizar suas aplicações. Não estar em conformidade com o padrão SQL não é necessariamente um erro, a menos que essa conformidade esteja explicitamente declarada.
Antes de continuar, verifique a lista TODO (a fazer) e a FAQ para ver se o erro já é conhecido. Se você não conseguir decodificar a informação da lista TODO, relate seu problema. O mínimo que podemos fazer é tornar a lista TODO mais clara.
O mais importante a ser lembrado sobre relatórios erros é fornecer todos os fatos, e somente os fatos. Não especule sobre o que você acha que está errado, o que “parece que deve ser feito”, ou em que parte do programa está o erro. Se você não estiver familiarizado com a implementação, provavelmente vai supor errado, e não vai nos ajudar nem um pouco. E, mesmo que você esteja correto, uma explicação abrangente é um ótimo complemento, mas não substitui os fatos. Se formos corrigir o erro, primeiro temos que vê-lo acontecer por nós mesmo. Informar meramente os fatos é relativamente direto (provavelmente pode ser copiado e colado a partir da tela), mas muitas vezes são deixados de fora detalhes importantes, porque se pensou que não tinham importância, ou que o relatório seria entendido de qualquer forma.
Os seguintes itens devem estar contidos em todo relatório de erro:
A sequência exata dos passos, desde o
início do programa, necessários para
reproduzir o problema. Isto deve estar autocontido;
não é suficiente enviar meramente o comando
SELECT
, sem enviar os comandos
CREATE TABLE
e INSERT
que o
precederam, caso a saída dependa dos dados contidos nas tabelas.
Não temos tempo para realizar a engenharia reversa do esquema do
seu banco de dados e, se tivermos que criar nossos próprios dados,
provavelmente não vamos conseguir reproduzir o problema.
O melhor formato para um caso de teste, para problemas relacionados
com a linguagem SQL, é um arquivo mostrando o
problema que possa ser executado a partir da interface cliente
psql (certifique-se de não existir nada
em seu arquivo de inicialização ~/.psqlrc
).
Uma maneira fácil de criar esse arquivo é usando o
pg_dump para gerar as declarações da
tabela e dos dados necessários para montar o cenário e, depois,
adicionar o comando com problema.
Encorajamos você a minimizar o tamanho do exemplo, mas isto não é
absolutamente necessário. Se o erro for reproduzível, nós o
encontraremos de qualquer maneira.
Se a sua aplicação utiliza alguma outra interface cliente, tal como o PHP, então, por favor, tente isolar o comando com o problema. Provavelmente não iremos configurar um servidor Web para reproduzir o seu problema. De qualquer maneira, lembre-se de fornecer os arquivos de entrada exatos, e não suponha que o problema aconteça com “arquivos grandes”, ou “bancos de dados de tamanho médio”, etc., porque estas informações são muito pouco precisas para serem úteis.
A saída obtida. Por favor, não diga que “não funcionou” ou que “deu pau” (crashed). Se houver uma mensagem de erro, mostre-a, mesmo que você não a entenda. Se o programa terminar com um erro do sistema operacional, diga qual. Se nada acontecer, informe. Mesmo que o resultado do seu caso de teste seja o término anormal do programa, ou seja, óbvio de alguma outra forma, pode ser que não aconteça na nossa plataforma. O mais fácil a ser feito é copiar a saída do terminal diretamente, se isso for possível.
Se estiver sendo relatada uma mensagem de erro, por favor obtenha
a forma mais extensa da mensagem. No psql
execute antes \set VERBOSITY verbose
.
Se a mensagem estiver sendo extraída do log do servidor, defina o
parâmetro em tempo de execução log_error_verbosity
como verbose
, para serem registrados todos os detalhes.
No caso de erros fatais, a mensagem de erro informada pelo cliente pode não conter toda a informação disponível. Por favor, olhe também a saída do log do servidor de banco de dados. Se você não mantém a saída do log do servidor, essa é uma boa hora para começar.
É muito importante especificar o que você espera como saída. Se for escrito apenas “Esse comando produz essa saída”, ou “Isso não é o que eu esperava”, poderemos executar, olhar a saída, e achar que está tudo correto, exatamente o que esperávamos que acontecesse. Não devemos gastar tempo decodificando a semântica exata por trás de seus comandos. Abstenha-se, particularmente, de dizer meramente “Isto não é o que o SQL diz ou o que o Oracle faz”. Pesquisar o comportamento correto do SQL não é uma tarefa divertida, nem sabemos como todos os outros bancos de dados relacionais existentes se comportam (se o problema for o término anormal do programa, esse item obviamente pode ser omitido).
Todas as opções de linha de comando e outras opções de inicialização, incluindo as variáveis de ambiente relevantes e os arquivos de configuração alterados em relação ao padrão. Novamente, forneça a informação exata. Se estiver sendo utilizada uma distribuição pré-configurada, que inicializa o servidor de banco de dados durante o boot, você deve tentar descobrir como isto é feito.
Qualquer coisa que você tenha feito que seja diferente das instruções de instalação.
A versão do PostgreSQL.
Pode ser executado o comando SELECT version();
para descobrir a versão do servidor ao qual você está conectado.
A maioria dos programas executáveis também têm a opção
--version
; pelo menos
postgres --version
e
psql --version
devem funcionar.
$
postgres --version
postgres (PostgreSQL) 14.5$
psql --version
psql (PostgreSQL) 14.5
Se a função ou as opções não existirem, então a versão sendo usada é mais que antiga o suficiente para merecer uma atualização. Se estiver sendo usada uma versão pré-configurada, como RPMs, informe, incluindo qualquer sub-versão que o pacote possa ter. Se estiver se referindo a uma versão do Git, isto deve ser mencionado, incluindo a data e a hora da versão.
Se a sua versão for anterior a 14.5, quase certamente lhe pediremos para atualizar. Existem muitas correções de erro e melhorias a cada nova liberação, portanto é bem possível que o erro encontrado em uma versão antiga do PostgreSQL já esteja corrigido. Só podemos oferecer suporte limitado às instalações usando versões antigas do PostgreSQL; se for desejado mais do que pode ser fornecido, deve ser levado em consideração a contratação de um suporte comercial.
Informações da plataforma. Isto inclui o nome e a versão do núcleo, a biblioteca C, o processador e a memória. Geralmente basta informar o fornecedor e a versão, mas não se deve supor que todo mundo saiba exatamente o que o “Debian” contém, ou que todo mundo use x86_64. Havendo problemas de instalação, então também são necessárias informações sobre as ferramentas empregadas (compilador, make, etc.).
Não tenha medo que seu relatório de erro fique muito longo. Esse é um fato da vida. É melhor informar tudo da primeira vez do que termos que extrair os fatos de você. Por outro lado, se seus arquivos de entrada são muito grandes, é justo perguntar primeiro se alguém está interessado em vê-los. Aqui está um artigo que dá mais algumas dicas sobre como relatar erros.
Não perca todo o seu tempo tentando descobrir que mudanças na entrada vão fazer o problema desaparecer. Isto provavelmente não vai ajudar a solucionar o problema. Se for visto que o erro não pode ser corrigido imediatamente, você vai ter tempo para descobrir e compartilhar sua descoberta. Também, novamente, não perca seu tempo adivinhando porque o erro existe, nós o descobriremos em breve.
Ao escrever o relatório de erro, por favor escolha uma terminologia que não confunda. O pacote de software em seu todo é chamado de “PostgreSQL” e, algumas vezes, de “Postgres” para abreviar. Se estiver se referindo especificamente ao processo servidor mencione isso, não diga apenas “o PostgreSQL travou”. O travamento de um único processo servidor é bem diferente do travamento do processo “postgres” pai; por favor não diga “servidor travado” quando um único processo servidor travou, nem o contrário. Além disso, os programas cliente, como a interface interativa “psql”, são completamente separados do servidor. Por favor, tente especificar se o problema está no lado cliente ou no lado servidor.
Em geral, envie relatórios de erro para a lista de discussão
de relatórios de erros em
<pgsql-bugs@lists.postgresql.org>
.
É necessário utilizar um assunto descritivo para a mensagem de
correio eletrônico, talvez partes da própria mensagem de erro.
Outra forma é preencher o relatório de erro disponível no
sítio do projeto.
Preencher o relatório de erro desta forma faz com que seja enviado
para a lista de discussão
<pgsql-bugs@lists.postgresql.org>
.
Se o seu relatório de erro tiver implicações de segurança e você
preferir que ele não se torne imediatamente visível em arquivos
públicos, não envie para pgsql-bugs
.
Os problemas de segurança podem ser reportados com privacidade para
<security@postgresql.org>
.
Não envie o relatório de erro para nenhuma lista de discussão dos
usuários, tal como <pgsql-sql@lists.postgresql.org>
ou
<pgsql-general@lists.postgresql.org>
.
Essas listas de discussão são para responder perguntas dos usuários,
e seus assinantes normalmente não desejam receber relatórios de erro.
Mais importante ainda, eles provavelmente não vão conseguir corrigir o erro.
Por favor, também não envie relatórios para a
lista de discussão dos desenvolvedores em
<pgsql-hackers@lists.postgresql.org>
.
Essa lista tem por finalidade discutir o desenvolvimento do
PostgreSQL, e seria bom se pudéssemos
manter os relatórios de erros separados. Podemos optar por assumir uma
discussão sobre seu relatório de erro em pgsql-hackers
,
se o problema precisar de mais revisão.
Se você tiver um problema com a documentação, o melhor lugar para
reportá-lo é na lista de discussão de documentação
<pgsql-docs@lists.postgresql.org>
. Por favor, seja
específico sobre qual parte da documentação você está insatisfeito.
[3]
Se o erro for um problema de portabilidade em uma plataforma sem
suporte, envie uma mensagem de correio eletrônico para
<pgsql-hackers@lists.postgresql.org>
, para que nós
(e você) possamos trabalhar para portar o
PostgreSQL para essa plataforma.
Devido à quantidade lamentável de spam circulando, todas as listas acima serão moderadas, a menos que você esteja inscrito, significando que haverá algum atraso antes que o e-mail seja entregue. Se desejar se inscrever nas listas, visite https://lists.postgresql.org/ para obter instruções.
[3] Veja em Aviso Legal e Contato como informar erros de tradução encontrados nessa documentação. (N. T.)