我不是 PostgreSQL 专家,但是最近在代码审查过程中遇到了一些 PostgreSQL 代码,它创建和删除临时表的方式与我们在 SQL Server 中执行的典型方式一致。例如,在 SQL Server 中我们会这样做:
DROP TABLE IF EXISTS #temp_data;
CREATE TABLE #temp_data
(
i int NOT NULL
);
代码审查显示了以下代码:
BEGIN;
DROP TABLE IF EXISTS temp_data;
COMMIT;
BEGIN;
CREATE TEMP TABLE IF NOT EXISTS temp_data(
i int NOT NULL
);
COMMIT;
Stack Overflow 上的这个答案声称您不应该因为pg_attribute
膨胀而频繁地删除并重新创建临时表。
ChatGPT(gah!)对膨胀有这样的看法pg_attribute
:
在 PostgreSQL 中,频繁创建临时表可能会导致数据库膨胀
pg_attribute
,因为每个新临时表都会添加元数据,即使删除该表后,这些元数据仍会保留在系统目录中。为避免数据库过度膨胀,请考虑以下最佳实践:
- 使用
ON COMMIT DELETE ROWS
而不是删除表:CREATE TEMP TABLE temp_data ( i int NOT NULL ) ON COMMIT DELETE ROWS;
pg_temp
对会话级临时表使用架构CREATE TEMP TABLE pg_temp.temp_data ( id SERIAL PRIMARY KEY, value TEXT );
由于我对任何大型语言模型所作的任何声明的真实性都深表怀疑,我应该选择哪种方法?事实上,这两种方法都有效吗?