2010-06-14 71 views
2

我在哪裏可以在posgresql文件夾中找到創建的臨時表?!?如果我從temp_table中選擇*,比我得到的結果,但無法看到它在PgAdmin中的數據庫結構?臨時表在哪裏創建?

回答

4

將臨時表放入名爲「pg_temp_NNN」的模式中,其中「NNN」表示您連接到的是哪個服務器後端。這會隱式添加到創建它們的會話中的搜索路徑中。

請注意,您不能通過另一個連接訪問一個連接的臨時表......因此,根據pgAdmin如何組織其連接,即使能夠在對象資源管理器中查找表可能沒有用。

+1

pgAdmin的使用爲對象瀏覽器和查詢工具獨立的連接,所以這樣就不可能看到臨時表。 – 2010-06-14 17:41:42

+0

它創建臨時表的代價是多少?它等同於在內存中創建數據結構嗎? – Peter 2014-02-16 13:28:27

+0

如何獲取此臨時模式的名稱?我需要從information_schema.tables中提取表定義,所以別名「pg_temp」對我來說沒有用處。 – PhilHibbs 2017-02-17 12:27:05

0

這裏是一個辦法讓pg_temp_ 名NNN模式爲會話:

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

這將確定正在運行的SQL語句本身的會話,並返回會話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 
+0

請編輯您的答案以提供更多詳細信息。 – Gray 2017-02-17 16:26:39

+1

'從pg_namespace中選擇nspname,其中oid = pg_my_temp_schema();'更短 – 2017-02-20 12:43:41