19.17. Opções de desenvolvedor #

Os parâmetros a seguir destinam-se a testes realizados por desenvolvedores, não devendo nunca ser usados em um banco de dados de produção. Entretanto, alguns deles podem ser usados para auxiliar na recuperação de bancos de dados seriamente danificados. Por este motivo foram excluídos do arquivo postgresql.conf de amostra. Note que muitos desses parâmetros requerem sinalizadores especiais na compilação do código-fonte para funcionarem.

allow_in_place_tablespaces (boolean) #

Permite que sejam criados espaços de tabelas como diretórios dentro de pg_tblspc, quando é fornecida uma cadeia de caracteres de localização vazia ao comando CREATE TABLESPACE. O objetivo é permitir o teste de cenários de replicação em que os servidores primário e em-espera estão em execução na mesma máquina. Estes diretórios provavelmente vão confundir as ferramentas de cópia de segurança que esperam encontrar apenas ligações simbólicas neste local. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração.

allow_system_table_mods (boolean) #

Permite a modificação da estrutura das tabelas do sistema, bem como outras ações arriscadas nas tabelas do sistema. Caso contrário, esta ação não será permitida nem mesmo para superusuários. O uso imprudente dessa configuração pode causar perda irrecuperável dos dados, ou corromper gravemente o sistema de banco de dados. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração.

backtrace_functions (string) #

Este parâmetro contém uma lista separada por vírgulas de nomes de funções C. Se for gerado um erro, e o nome da função C interna onde o erro ocorreu corresponder a um valor da lista, será escrito um backtrace (resumo das ações) no registro de eventos do servidor, junto com a mensagem de erro. Pode ser usado para depurar áreas específicas do código-fonte.

O suporte ao backtrace não está disponível em todas as plataformas, e a qualidade dos backtraces depende das opções de compilação.

Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração.

debug_copy_parse_plan_trees (boolean) #

Ativar esta opção força todas as árvores de análise sintática e de planejamento serem processadas por meio da função copyObject(), para facilitar a detecção de erros e omissões nesta função. O padrão é off.

Este parâmetro só está disponível quando foi definido DEBUG_NODE_TESTS_ENABLED em tempo de compilação. (o que acontece automaticamente ao usar a opção --enable-cassert do configure).

debug_discard_caches (integer) #

Quando definido como 1, cada entrada de cache do catálogo do sistema é invalidada na primeira oportunidade possível, independentemente de ter realmente ocorrido algo que a tornaria inválida. Como resultado, o cache dos catálogos do sistema é inteiramente desativado, de modo que o servidor será executado de forma extremamente lenta. Os valores mais altos executam a invalidação do cache recursivamente, o que é ainda mais lento, e útil apenas para testar a própria lógica de cache. O valor padrão 0 seleciona o comportamento normal de cache do catálogo.

Este parâmetro pode ser muito útil ao tentar acionar bugs difíceis de reproduzir envolvendo alterações simultâneas no catálogo, mas raramente é necessário. Veja os arquivos de código-fonte inval.c e pg_config_manual.h para obter detalhes.

Este parâmetro tem suporte quando DISCARD_CACHES_ENABLED estava definido em tempo de compilação (o que acontece automaticamente ao usar a opção --enable-cassert do comando configure). Em construções de produção, seu valor sempre será 0, e as tentativas de o definir com outro valor vão gerar um erro.

debug_io_direct (string) #

Solicita ao kernel para minimizar os efeitos de cache para dados de relações e arquivos de WAL usando O_DIRECT (a maioria dos sistemas do tipo Unix), F_NOCACHE (macOS) ou FILE_FLAG_NO_BUFFERING (Windows).

Pode ser definido como uma cadeia de caracteres vazia (o padrão) para desativar o uso de E/S direta, ou como uma lista de operações separadas por vírgulas que devem usar E/S direta. As opções válidas são data para arquivos de dados principais, wal para arquivos de WAL e wal_init para arquivos de WAL quando são alocados inicialmente. Este parâmetro só pode ser definido na ativação do servidor.

Alguns sistemas operacionais e sistemas de arquivos não oferecem suporte para E/S direta, portanto configurações não padrão podem ser rejeitadas na ativação ou causar erros.

No momento esta funcionalidade reduz o desempenho e destina-se apenas a testes de desenvolvedores.

debug_parallel_query (enum) #

Permite o uso de consultas paralelas para fins de teste, mesmo em casos onde não se espera ganho de desempenho. Os valores permitidos para debug_parallel_query são off (uso do modo paralelo somente quando houver expectativa de melhoria de desempenho), on (força consulta paralela para todas as consultas em que isto for considerado seguro), e regress (como on, mas com alterações de comportamento adicionais, conforme explicado abaixo).

Mais especificamente, definir este valor como on irá adicionar um nó Gather ao topo de qualquer plano de consulta para o qual isto pareça ser seguro, de forma que a consulta seja executada em um processo paralelo. Mesmo quando um processo trabalhador paralelo não estiver disponível, ou não puder ser usado, operações como iniciar uma subtransação que seriam proibidas em um contexto de consulta paralela serão proibidas, a menos que o planejador acredite que isto irá causar a falha da consulta. Se ocorrerem falhas ou resultados inesperados quando esta opção estiver ativa, algumas funções usadas pela consulta podem precisar ser marcadas com PARALLEL UNSAFE (ou, possivelmente, PARALLEL RESTRICTED).

Definir este valor como regress tem os mesmos efeitos que defini-lo como on, além de alguns efeitos adicionais destinados a facilitar os testes de regressão automatizados. Normalmente as mensagens de um processo trabalhador paralelo incluem uma linha de contexto indicando isto, mas uma configuração de regress suprime esta linha para que a saída seja a mesma que na execução não paralela. Além disso, os nós Gather adicionados aos planos por esta configuração são ocultados na saída EXPLAIN para que a saída corresponda ao que seria obtido se esta configuração estivesse inativa.

debug_raw_expression_coverage_test (boolean) #

Ativar esta opção força todas as árvores de análise sintática bruta para instruções DML serem examinadas por raw_expression_tree_walker(), para facilitar a detecção de erros e omissões nesta função. O padrão é off.

Este parâmetro só está disponível quando DEBUG_NODE_TESTS_ENABLED estava definido em tempo de compilação (o que acontece automaticamente ao usar a opção --enable-cassert do configure).

debug_write_read_parse_plan_trees (boolean) #

Ativar esta opção força todas as árvores de análise e planejamento serem passadas por outfuncs.c/readfuncs.c, para facilitar a detecção de erros e omissões nesses módulos. O padrão é off.

Este parâmetro só está disponível quando DEBUG_NODE_TESTS_ENABLED estava definido em tempo de compilação (o que acontece automaticamente ao usar a opção --enable-cassert do configure).

ignore_system_indexes (boolean) #

Ignora os índices do sistema ao ler as tabelas do sistema (mas ainda atualiza os índices ao modificar as tabelas). É útil ao recuperar índices de sistema danificados. Este parâmetro não pode ser alterado após o início da sessão.

post_auth_delay (integer) #

Quantidade de tempo de atraso quando é iniciado um novo processo servidor, após conduzir o procedimento de autenticação. O objetivo é dar aos desenvolvedores a oportunidade de se conectar ao processo servidor com um depurador. Se o valor for especificado sem unidades, será considerado segundos. O valor zero (o padrão) desativa o atraso. Este parâmetro não pode ser alterado após o início da sessão.

pre_auth_delay (integer) #

Quantidade de tempo de atraso logo após a bifurcação (fork) de um novo processo servidor, antes de conduzir o procedimento de autenticação. O objetivo é dar aos desenvolvedores a oportunidade de se conectar ao processo servidor com um depurador para acompanhar mau comportamento na autenticação. Se o valor for especificado sem unidades, será considerado segundos. O valor zero (o padrão) desativa o atraso. Este parâmetro só pode ser definido no arquivo postgresql.conf, ou na linha de comando do servidor.

trace_notify (boolean) #

Gera uma grande quantidade de resultados de depuração para os comandos LISTEN e NOTIFY. O parâmetro client_min_messages ou log_min_messages deve ser DEBUG1, ou inferior, para enviar esta saída para os registros de eventos do cliente ou do servidor, respectivamente.

trace_sort (boolean) #

Se ativo, emite informações sobre o uso de recursos durante as operações de classificação.

trace_locks (boolean) #

Se ativo, produz informações sobre o uso de bloqueio. As informações descarregadas incluem o tipo de operação de bloqueio, o tipo de bloqueio, e o identificador exclusivo do objeto que está sendo bloqueado ou desbloqueado. Também estão incluídas máscaras de bits para os tipos de bloqueio já concedidos neste objeto, bem como para os tipos de bloqueio aguardados neste objeto. Para cada tipo de bloqueio, uma contagem do número de bloqueios concedidos e bloqueios em espera também é descarregada, bem como os totais. Um exemplo da saída do arquivo de registro de eventos é mostrado a seguir:

LOG:  LockAcquire: new: lock(0xb7acd844) id(24688,24696,0,0,0,1)
      grantMask(0) req(0,0,0,0,0,0,0)=0 grant(0,0,0,0,0,0,0)=0
      wait(0) type(AccessShareLock)
LOG:  GrantLock: lock(0xb7acd844) id(24688,24696,0,0,0,1)
      grantMask(2) req(1,0,0,0,0,0,0)=1 grant(1,0,0,0,0,0,0)=1
      wait(0) type(AccessShareLock)
LOG:  UnGrantLock: updated: lock(0xb7acd844) id(24688,24696,0,0,0,1)
      grantMask(0) req(0,0,0,0,0,0,0)=0 grant(0,0,0,0,0,0,0)=0
      wait(0) type(AccessShareLock)
LOG:  CleanUpLock: deleting: lock(0xb7acd844) id(24688,24696,0,0,0,1)
      grantMask(0) req(0,0,0,0,0,0,0)=0 grant(0,0,0,0,0,0,0)=0
      wait(0) type(INVALID)

Os detalhes da estrutura que está sendo descarregada podem ser encontrados em src/include/storage/lock.h.

Este parâmetro só estará disponível se a macro LOCK_DEBUG estava definida quando o PostgreSQL foi compilado.

trace_lwlocks (boolean) #

Se ativo, produz informações sobre o uso de bloqueio leve. Os bloqueios leves destinam-se, principalmente, a fornecer exclusão mútua de acesso a estruturas compartilhadas de dados em memória.

Este parâmetro só estará disponível se a macro LOCK_DEBUG estava definida quando o PostgreSQL foi compilado.

trace_userlocks (boolean) #

Se ativo, produz informações sobre o uso de bloqueio pelo usuário. A saída é a mesma de trace_locks, apenas para bloqueios informativos.

Este parâmetro só estará disponível se a macro LOCK_DEBUG estava definida quando o PostgreSQL foi compilado.

trace_lock_oidmin (integer) #

Se ativo, não rastreia bloqueios para tabelas abaixo desse OID (usado para evitar saída em tabelas do sistema).

Este parâmetro só estará disponível se a macro LOCK_DEBUG estava definida quando o PostgreSQL foi compilado.

trace_lock_table (integer) #

Rastreia incondicionalmente os bloqueios nesta tabela (OID).

Este parâmetro só estará disponível se a macro LOCK_DEBUG estava definida quando o PostgreSQL foi compilado.

debug_deadlocks (boolean) #

Se ativo, faz a descarga das informações sobre todos os bloqueios correntes quando ocorre o tempo limite de conflito.

Este parâmetro só estará disponível se a macro LOCK_DEBUG estava definida quando o PostgreSQL foi compilado.

log_btree_build_stats (boolean) #

Se ativo, registra estatísticas sobre uso de recursos do sistema (memória e CPU) em várias operações de árvore-B.

Este parâmetro só estará disponível se a macro BTREE_BUILD_STATS estava definida quando o PostgreSQL foi compilado.

wal_consistency_checking (string) #

Este parâmetro deve ser usado para verificar bugs nas rotinas de reprodução do WAL. Quando ativo, são adicionadas ao registro imagens de página inteira de quaisquer buffers modificados em conjunto com o registro de WAL. Se o registro for reproduzido posteriormente, o sistema primeiro irá aplicar cada registro, e depois irá testar se os buffers modificados pelo registro correspondem às imagens armazenadas. Em certos casos (como bits de dicas), são aceitáveis pequenas variações e são ignoradas. Quaisquer diferenças inesperadas vão resultar em um erro fatal, encerrando a recuperação.

O valor padrão dessa configuração é uma cadeia de caracteres vazia, que desativa este recurso. Pode ser definido como all, para verificar todos os registros, ou como uma lista de gerenciadores de recursos separados por vírgula, para verificar apenas os registros originados por estes gerenciadores de recursos. No momento, os gerenciadores de recursos com suporte são heap, heap2, btree, hash, gin, gist, sequence, spgist, brin e generic. As extensões podem definir gerenciadores de recursos adicionais. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração.

wal_debug (boolean) #

Se ativo, produz saída de depuração relacionada ao WAL. Este parâmetro só estará disponível se a macro WAL_DEBUG estava definida quando o PostgreSQL foi compilado.

ignore_checksum_failure (boolean) #

Só tem efeito quando -k/--data-checksums está ativo.

A detecção de falha na soma de verificação durante a leitura faz normalmente com que o PostgreSQL relate um erro, interrompendo a transação corrente. Definir ignore_checksum_failure como ativo faz com que o sistema ignore a falha (mas ainda relate um aviso), e continue o processamento. Este comportamento pode causar travamentos, propagar ou ocultar corrupção dos dados, ou outros problemas sérios. Entretanto, pode permitir transpor o erro e recuperar tuplas não danificadas que ainda possam estar presentes na tabela, se o cabeçalho do bloco ainda estiver correto. Se o cabeçalho estiver corrompido, será relatado um erro, mesmo se esta opção estiver ativa. O padrão é off. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração.

zero_damaged_pages (boolean) #

A detecção de um cabeçalho de página danificado normalmente faz com que o PostgreSQL relate um erro, interrompendo a transação corrente. Definir zero_damaged_pages como ativo faz com que o sistema relate um aviso, zere a página danificada na memória, e continue o processamento. Este comportamento irá destruir os dados, especificamente todas as linhas da página danificada. Entretanto, permite transpor o erro e recuperar linhas de quaisquer páginas não danificadas que possam estar presentes na tabela. Serve para recuperar dados se ocorrer corrupção devido a um erro de hardware ou de software. Geralmente não se deve ativar este parâmetro até que se tenha perdido a esperança de recuperar os dados das páginas danificadas de uma tabela. As páginas zeradas não são descarregadas para o disco; por isto, é recomendado recriar a tabela ou o índice antes de desativar este parâmetro novamente. O padrão é off. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração.

ignore_invalid_pages (boolean) #

Se definido como off (o padrão), a detecção de registros do WAL com referências a páginas inválidas durante a recuperação faz com que o PostgreSQL gere um erro no nível PANIC, interrompendo a recuperação. Definir ignore_invalid_pages como on faz com que o sistema ignore referências a páginas inválidas em registros do WAL (mas ainda relate um aviso) e continue a recuperação. Este comportamento pode causar travamentos, perda de dados, propagar ou ocultar corrupção dos dados, ou outros problemas sérios. Entretanto, pode permitir que se transponha o erro no nível PANIC, conclua a recuperação, e faça com que o servidor seja carregado. Este parâmetro só pode ser definido na carga do servidor. Só tem efeito durante a recuperação, ou no modo em-espera.

jit_debugging_support (boolean) #

Se LLVM tiver a funcionalidade necessária, registra as funções geradas no GDB. Isto torna a depuração mais fácil. O padrão é off. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração no início da sessão, e ela não pode ser alterada de forma alguma durante a sessão.

jit_dump_bitcode (boolean) #

Escreve o LLVM IR gerado no sistema de arquivos, dentro do data_directory. Só é útil para trabalhar nos aspectos internos da implementação do JIT. O padrão é off. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração.

jit_expressions (boolean) #

Determina se as expressões são compiladas JIT, quando a compilação JIT está ativa (veja Quando usar o JIT?). O padrão é on.

jit_profiling_support (boolean) #

Se LLVM tiver a funcionalidade necessária, produz os dados necessários para permitir que perf crie perfis de funções geradas pelo JIT. Isto escreve arquivos em ~/.debug/jit/; o usuário é responsável por realizar a limpeza quando desejar. O padrão é off. Apenas superusuários e usuários com o privilégio SET apropriado podem alterar esta configuração no início da sessão, e ela não pode ser alterada de forma alguma durante a sessão.

jit_tuple_deforming (boolean) #

Determina se a deformação da tupla é compilada JIT, quando a compilação JIT está ativa (veja Quando usar o JIT?). O padrão é on.

remove_temp_files_after_crash (boolean) #

Quando definido como on, o padrão, o PostgreSQL irá remover automaticamente os arquivos temporários após uma falha do processo servidor. Se desativado, os arquivos serão retidos, podendo ser usados para depuração, por exemplo. Entretanto, falhas repetidas podem resultar no acúmulo de arquivos inúteis. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

send_abort_for_crash (boolean) #

Por padrão, após uma falha no servidor o servidor de e-mail irá interromper os processos filhos restantes enviando-lhes sinais SIGQUIT, permitindo que eles sejam encerrados de forma mais ou menos correta. Quando esta opção está definida como on, é enviado SIGABRT em seu lugar. Normalmente isto resulta na geração de um arquivo de descarga de memória (core dump) para cada um desses processos filhos. Isto pode ser útil para investigar o estado de outros processos após uma falha. Também pode consumir muito espaço em disco em caso de falhas repetidas, portanto esta opção não deve estar ativa em sistemas que não se esteja monitorando cuidadosamente. Deve-se tomar cuidado, porque não há suporte para limpeza automática dos arquivos principais. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

send_abort_for_kill (boolean) #

Por padrão, após tentar interromper um processo filho usando SIGQUIT, o postmaster irá aguardar por cinco segundos e, em seguida, irá enviar um SIGKILL para forçar o encerramento imediato. Quando esta opção está definida como on, é enviado SIGABRT em vez de SIGKILL. Normalmente isto resulta na geração de um arquivo de descarga de memória (core dump) para cada um desses processos filhos. Isto pode ser útil para investigar o estado de processos filhos travados. Também pode consumir muito espaço em disco em caso de falhas repetidas, portanto esta opção não deve estar ativa em sistemas que não se esteja monitorando cuidadosamente. Deve-se tomar cuidado, porque não há suporte para limpeza automática dos arquivos principais. Este parâmetro só pode ser definido no arquivo postgresql.conf ou na linha de comando do servidor.

debug_logical_replication_streaming (enum) #

Os valores permitidos são buffered e immediate. O padrão é buffered. Este parâmetro tem por finalidade testar a decodificação lógica e a replicação de grandes transações. O efeito de debug_logical_replication_streaming é diferente para o publicador e o subscritor:

Do lado do editor, debug_logical_replication_streaming permite transmitir ou serializar alterações imediatamente na decodificação lógica. Quando definida como immediate, irá transmitir cada alteração se a opção streaming de CREATE SUBSCRIPTION estiver ativa, caso contrário irá serializar cada alteração. Quando definida como buffered, A decodificação irá transmitir ou serializar as alterações quando for alcançado logical_decoding_work_mem.

Do lado do subscritor, se a opção streaming estiver definida como parallel, debug_logical_replication_streaming poderá ser usada para direcionar o processo trabalhador líder a enviar as alterações para a fila de memória compartilhada ou para serializar todas as alterações no arquivo. Quando definida como buffered, o líder irá enviar as alterações para os processos trabalhadores de aplicação em paralelo através de uma fila de memória compartilhada. Quando definida como immediate, o processo líder irá serializar todas as alterações nos arquivos e notificar os processos de aplicação paralelos para que leiam e apliquem as alterações ao final da transação.