在pg_class中找不到临时表



我创建了一个大的临时表。我可以在/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。使用:

将数据库的OID解析为其名称
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创建临时函数?
  • 搜索路径如何影响标识符解析和"当前模式">

相关内容

  • 没有找到相关文章

最新更新