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 oCREATE 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 oON COMMIT DROP
sintaxe de criação), ou conforme a necessidade (precedendo qualquerCREATE TEMPORARY TABLE
instrução com umDROP 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 empostgresql.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.