Não sou especialista em PostgreSQL, mas recentemente me deparei com um código PostgreSQL durante uma revisão de código que cria e remove tabelas temporárias de uma maneira que parece consistente com a maneira típica como fazemos isso no SQL Server. Ou seja, no SQL Server faríamos:
DROP TABLE IF EXISTS #temp_data;
CREATE TABLE #temp_data
(
i int NOT NULL
);
A revisão do código mostrou este código:
BEGIN;
DROP TABLE IF EXISTS temp_data;
COMMIT;
BEGIN;
CREATE TEMP TABLE IF NOT EXISTS temp_data(
i int NOT NULL
);
COMMIT;
Esta resposta no Stack Overflow afirma que você não deve remover e recriar tabelas temporárias com frequência por causa do pg_attribute
inchaço.
O ChatGPT (ah!) tem isso a dizer sobre pg_attribute
inchaço:
No PostgreSQL, criar tabelas temporárias com frequência pode causar inchaço em
pg_attribute
, pois cada nova tabela temporária adiciona metadados que persistem nos catálogos do sistema mesmo depois que a tabela é descartada. Para evitar inchaço excessivo, considere estas práticas recomendadas:
- Use
ON COMMIT DELETE ROWS
em vez de descartar tabelas:CREATE TEMP TABLE temp_data ( i int NOT NULL ) ON COMMIT DELETE ROWS;
- Use
pg_temp
Schema para tabelas temporárias em nível de sessãoCREATE TEMP TABLE pg_temp.temp_data ( id SERIAL PRIMARY KEY, value TEXT );
Já que tenho muitas dúvidas sobre a veracidade de quaisquer alegações feitas por qualquer modelo de linguagem grande, qual abordagem devo escolher? De fato, qualquer uma das abordagens é válida?