You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pg_class中无法找到已创建的临时表,如何查看该表及获取其大小?

临时表的元数据查询与大小获取方案

为什么pg_class查不到临时表?

PostgreSQL的临时表元数据存储在会话专属的临时模式(名称以pg_temp_开头,会话内可简写为pg_temp)中,默认查询pg_class时不会包含临时模式的对象,且临时表仅对创建它的会话可见,跨会话无法访问其元数据。

查找临时表的元数据

方法1:关联pg_namespace筛选临时模式

通过关联系统表pg_namespace,筛选出临时模式下的临时表:

SELECT 
  c.relname AS table_name,
  n.nspname AS schema_name,
  c.relpersistence AS persistence_type
FROM pg_class c
JOIN pg_namespace n ON c.relnamespace = n.oid
WHERE c.relpersistence = 't';

方法2:直接查询临时模式的pg_class

临时会话内可直接指定临时模式查询:

SELECT relname, oid FROM pg_temp.pg_class WHERE relpersistence = 't';

注意:必须在创建临时表的会话中执行以上查询,其他会话无法看到该临时表的元数据。

获取临时表的大小

单个临时表大小查询

使用pg_total_relation_size(包含数据、索引、FSM等所有关联文件)或pg_relation_size(仅数据文件),需指定临时表的完整模式名:

-- 显示总大小(含索引、FSM等)
SELECT pg_size_pretty(pg_total_relation_size('pg_temp.t3')) AS total_size;

-- 仅显示数据文件大小
SELECT pg_size_pretty(pg_relation_size('pg_temp.t3')) AS data_size;

批量查询所有临时表大小

结合元数据查询,一次性获取所有临时表的大小:

SELECT 
  c.relname AS table_name,
  pg_size_pretty(pg_total_relation_size(c.oid)) AS total_size,
  pg_size_pretty(pg_relation_size(c.oid)) AS data_size
FROM pg_class c
JOIN pg_namespace n ON c.relnamespace = n.oid
WHERE c.relpersistence = 't';

补充说明

你在目录中看到的t3_xxxx文件是临时表的物理存储文件,PostgreSQL会在会话结束后自动清理这些文件(除非临时表创建时指定了ON COMMIT PRESERVE ROWS且会话未结束)。

内容的提问来源于stack exchange,提问作者RomanShan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:05:19