PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Tabelas temporárias do PostgreSQL


Observe que, no Postgres, o comportamento padrão para tabelas temporárias é que elas não são descartadas automaticamente e os dados são persistidos no commit. Veja ON COMMIT .

As tabelas temporárias são, no entanto, descartadas no final de uma sessão de banco de dados:

As tabelas temporárias são eliminadas automaticamente no final de uma sessão ou, opcionalmente, no final da transação atual.

Existem várias considerações que você deve levar em consideração:
  • Se você deseja explicitamente DROP uma tabela temporária no final de uma transação, crie-a com o CREATE TEMPORARY TABLE ... ON COMMIT DROP sintaxe.
  • Na presença de pool de conexões , uma sessão de banco de dados pode abranger várias sessões de cliente; para evitar conflitos em CREATE , você deve descartar suas tabelas temporárias -- antes de retornar uma conexão ao pool (por exemplo, fazendo tudo dentro de uma transação e usando o ON COMMIT DROP sintaxe de criação), ou conforme a necessidade (precedendo qualquer CREATE TEMPORARY TABLE instrução com um DROP TABLE IF EXISTS correspondente , que tem a vantagem de também trabalhar com transações externas, por exemplo. se a conexão for usada no modo de confirmação automática.)
  • Enquanto a tabela temporária estiver em uso, quanto dela caberá na memória antes de transbordar para o disco? Veja os temp_buffers opção em postgresql.conf
  • Mais alguma coisa com a qual devo me preocupar ao trabalhar frequentemente com tabelas temporárias? Um vácuo é recomendado após você ter descartado as tabelas temporárias, para limpar quaisquer tuplas inativas do catálogo. O Postgres irá limpar automaticamente a cada 3 minutos ou mais para você ao usar as configurações padrão (auto_vacuum ).

Além disso, não relacionado à sua pergunta (mas possivelmente relacionado ao seu projeto):lembre-se de que, se você precisar executar consultas em uma tabela temporária depois você o preencheu, então é uma boa ideia criar índices apropriados e emitir um ANALYZE na tabela temporária em questão depois você terminou de inserir nele. Por padrão, o otimizador baseado em custo assumirá que uma tabela temporária recém-criada tem aproximadamente 1.000 linhas e isso pode resultar em um desempenho insatisfatório se a tabela temporária realmente contiver milhões de linhas.