我创建了一个大的临时表。我可以在/var/lib/pgpro/1c-14/data/base/16385
目录中找到它(其中16385
是数据库的OID)。
/var/lib/pgpro/1c-14/data/base/16385$ ls | grep -Eh "t"
t3_36317
t3_36317_fsm
t3_36320
t3_36321
但是我在pg_class
中没有看到它. 请求
select * from pg_class
where relpersistence = 't'
返回任何,虽然表保证在当前时刻存在!
我在哪里可以找到一个临时表,例如,找出它的大小?
如果您登录到同一DB集群的相同的DB,您应该看到pg_class
中的条目. 不是来自同一集群中的另一个DB。使用:
SELECT datname FROM pg_database WHERE oid = '16460';
(适用于同一集群中的任何DB)
要确保您确实连接到正确的数据库,请在同一会话中运行:
SELECT current_database();
但是,即使您在pg_class
中看到了该条目,也要注意您只能从同一会话中访问临时对象。每个会话都有自己的临时模式来保存它们各自的临时对象。
一个更有洞察力的查询版本:
SELECT pg_is_other_temp_schema(relnamespace) AS is_other_temp_schema
, relnamespace::regnamespace AS temp_schema
, pg_my_temp_schema()::regnamespace AS my_temp_schema
, pg_size_pretty(pg_total_relation_size(oid)) AS total_relation_size
, *
FROM pg_class
WHERE relpersistence = 't'
ORDER BY relname, pg_is_other_temp_schema(relnamespace), relnamespace::regnamespace::text;
我加入了总关系大小,因为你要求它。详细说明:
- 测量PostgreSQL表的行大小
排序"own"Temp对象放到顶部——如果有多个相同名称的对象。
新增的系统信息功能在手册中有说明。
相关:
- 如何在PostgreSQL创建临时函数?
- 搜索路径如何影响标识符解析和"当前模式">