我正在使用使用(本地)Postgres数据库的Windows应用程序,并将一些信息存储在临时表中。我想看看临时桌子,但是PGADMIN和DBVIS告诉我: ERROR: cannot access temporary tables of other sessions 试图查询数据时。我尝试更改架构和表格的权限,但这似乎没有帮助,即使我使用与程序本身相同的用户访问数据库(至少在DBVIS中)。我可以在数据库中更改设置,使我可以“ root”访问数据库中的所有会话?

有帮助吗?

解决方案

在其他会议中缺乏临时桌的访问不是权限的问题,而是设计的技术限制。 PostgreSQL后端 不能 访问另一个后端的临时桌子,因为临时桌子上没有一个常规的管家来允许并发访问。

在9.2中,您将要使用 UNLOGGED 桌子;从其他会议中可以看到这,但保留了临时表的大部分性能优势。

其他提示

最简洁的答案是不”。 临时桌子 在其他会议中 是看不见的 设计。如果两个会话具有相同的用户,则没有什么区别。甚至:

Autovacuum守护程序无法访问,因此无法真空或分析临时桌子

我不知道这是否可以帮助您,但是您可以尝试一下。

以下系统目录表查询应该能够列出数据库中其他会话中创建的所有临时表:

选择pn.nspname,pc.relname来自pg_class pc,pg_namespace pn wery pc.relnamespace = pn.oid and pc.relname iLike'your_temp_table_name';

每个PostgreSQL Doc, Temporary tables exist in a special schema 通常以名称为 pg_temp_xxx. 。因此,使用 schemaname.relationname 从上面的查询中,您应该能够查询临时表。如您在此处看到的那样,临时表被带有模式合格的名称。

例子: select * from pg_temp_20.your_temp_table_name

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top