临时表在哪里创建?

9

我在postgresql文件夹中可以找到已创建的临时表吗?如果我执行 select * from temp_table; 命令,我可以看到结果,但是在PgAdmin中无法看到它在我的数据库中的结构?

2个回答

13

临时表被放置在名为"pg_temp_NNN"的模式中,其中"NNN"表示您连接到的服务器后端。这会在创建它们的会话中隐含地添加到您的搜索路径中。

请注意,您无法通过另一个连接访问一个连接的临时表...因此,根据pgAdmin组织其连接的方式,即使能在对象资源管理器中找到表也可能没有用。


2
pgAdmin使用独立的连接来处理对象浏览器和查询工具,因此无法通过这种方式查看临时表。 - Magnus Hagander
1
创建临时表的成本有多高?它是否相当于在内存中创建数据结构? - Peter
我该如何获取临时模式的名称?我需要从information_schema.tables中提取表定义,因此别名“pg_temp”对我没有用。 - PhilHibbs

2

以下是获取当前会话中pg_temp_nnn模式名称的一种方法:

select distinct 'pg_temp_'||sess_id from pg_stat_activity where procpid = pg_backend_pid()

这将确定正在运行该SQL语句本身的会话,并返回它正在运行的会话ID。

然后,您可以使用此会话ID列出所有临时表:

select * 
from information_schema.tables 
where table_schema = 
  ( select distinct 'pg_temp_'||sess_id 
    from pg_stat_activity 
    where procpid = pg_backend_pid()
  )

或者获取表结构:

select * 
from information_schema.columns 
where table_schema = 
  ( select distinct 'pg_temp_'||sess_id 
    from pg_stat_activity 
    where procpid = pg_backend_pid()
  )
and table_name = 'my_temp_table'
order by ordinal_position

7
select nspname from pg_namespace where oid = pg_my_temp_schema(); 这个语句更加简洁。 - user330315

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接