有没有办法访问Postgres中其他会话的临时表?
-
16-10-2019 - |
题
我正在使用使用(本地)Postgres数据库的Windows应用程序,并将一些信息存储在临时表中。我想看看临时桌子,但是PGADMIN和DBVIS告诉我: ERROR: cannot access temporary tables of other sessions
试图查询数据时。我尝试更改架构和表格的权限,但这似乎没有帮助,即使我使用与程序本身相同的用户访问数据库(至少在DBVIS中)。我可以在数据库中更改设置,使我可以“ root”访问数据库中的所有会话?
解决方案
在其他会议中缺乏临时桌的访问不是权限的问题,而是设计的技术限制。 PostgreSQL后端 不能 访问另一个后端的临时桌子,因为临时桌子上没有一个常规的管家来允许并发访问。
在9.2中,您将要使用 UNLOGGED
桌子;从其他会议中可以看到这,但保留了临时表的大部分性能优势。
其他提示
我不知道这是否可以帮助您,但是您可以尝试一下。
以下系统目录表查询应该能够列出数据库中其他会话中创建的所有临时表:
选择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