5. Diretrizes para relatar erros

5.1. Identificação de erros
5.2. O que relatar
5.3. Onde reportar erros?

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.

5.1. Identificação de erros

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.

5.2. O que relatar

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.

    Nota

    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.

    Nota

    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.

5.3. Onde reportar erros?

Em geral, envie relatórios de erro para a lista de discussão de relatórios de erros em . É 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 .

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 .

Não envie o relatório de erro para nenhuma lista de discussão dos usuários, tal como ou . 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 . 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 . 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 , para que nós (e você) possamos trabalhar para portar o PostgreSQL para essa plataforma.

Nota

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

Contato

CSS válido!