关于PostgreSQL临时表的说法正确的有_____
A
自动清理的后台进程不会清空或者分析临时表
B
临时表会在会话专用共享区中创建
C
一旦会话结束,临时表会自动删除
D
必须在某个单独的表空间创建临时对象
关于PostgreSQL临时表的正确说法如下:
正确答案分析
选项A:自动清理的后台进程不会清空或者分析临时表
✅ 正确
PostgreSQL的自动清理进程(Autovacuum)不会处理临时表。由于临时表的生命周期仅限会话或事务,且数据在会话结束时自动删除,因此无需Autovacuum介入清理或统计信息收集。选项B:临时表会在会话专用共享区中创建
❌ 错误
临时表并非创建在“会话专用共享区”,而是存储在独立的临时模式(如pg_temp_n,n为会话标识)中。其物理文件默认位于数据库的默认表空间(如pg_default),也可通过temp_tablespaces参数配置到专用表空间。选项C:一旦会话结束,临时表会自动删除
✅ 正确
临时表的核心特性是会话隔离性与自动清理。无论是否显式删除,临时表及其数据会在会话终止时自动清除,包括表结构和存储文件。选项D:必须在某个单独的表空间创建临时对象
❌ 错误
临时对象默认创建在数据库的默认表空间(如pg_default),但支持通过配置temp_tablespaces参数指定专用表空间以优化性能或隔离存储。因此“必须”一词不准确。
补充说明
• 临时表的生命周期控制:
可通过 ON COMMIT 子句进一步细化临时表的行为:
• ON COMMIT PRESERVE ROWS(默认):事务提交后保留数据,表在会话结束时删除。
• ON COMMIT DELETE ROWS:事务提交后清空数据,表结构保留至会话结束。
• ON COMMIT DROP:事务提交后直接删除表。
• 临时表的性能优化:
若临时表数据量较大,可调整 temp_buffers 参数增加内存缓存,或通过 temp_tablespaces 将临时文件分配到高速存储(如SSD)以减少I/O竞争。
结论
正确答案:A、C
(临时表的自动清理由会话生命周期管理,无需Autovacuum干预,且会话终止时表自动删除。)




