我在postgresql文件夹中可以找到已创建的临时表吗?如果我执行 select * from temp_table;
命令,我可以看到结果,但是在PgAdmin中无法看到它在我的数据库中的结构?
我在postgresql文件夹中可以找到已创建的临时表吗?如果我执行 select * from temp_table;
命令,我可以看到结果,但是在PgAdmin中无法看到它在我的数据库中的结构?
临时表被放置在名为"pg_temp_NNN"的模式中,其中"NNN"表示您连接到的服务器后端。这会在创建它们的会话中隐含地添加到您的搜索路径中。
请注意,您无法通过另一个连接访问一个连接的临时表...因此,根据pgAdmin组织其连接的方式,即使能在对象资源管理器中找到表也可能没有用。
以下是获取当前会话中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
select nspname from pg_namespace where oid = pg_my_temp_schema();
这个语句更加简洁。 - user330315