当前位置: 首页>>WEB开发>>正文


有没有办法在postgres中访问其他会话的临时表?

webfans WEB开发 , , 去评论

问题描述

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

最佳解决办法

在其他会话中无法访问临时表不是权限问题,而是设计的技术限制。 PostgreSQL后端无法访问另一个后端的临时表,因为临时表都没有允许并发访问的常规内务处理。

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

次佳解决办法

简短的回答是”No”。 Temporary tables在其他会议中由are invisible设计。如果两个会话具有相同的用户,则没有区别。甚至:

The autovacuum daemon cannot access and therefore cannot vacuum or analyze temporary tables

第三种解决办法

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

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

select pn.nspname, pc.relname from pg_class pc, pg_namespace pn where pc.relnamespace = pn.oid and pc.relname ilike ‘your_temp_table_name’;

每个PostgreSQL docTemporary tables exist in a special schema通常使用名称pg_temp_xxx创建。所以,使用schemaname。从上面的查询relationname,你应该能够查询你的临时表。正如您在此处所见,临时表以schema-qualified名称引用。

示例:select * from pg_temp_20.your_temp_table_name

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/3052.html,转载请务必附带本地址声明。