3

我有4列的PostgreSQL數據庫表 - 標記column_a,column_b,等我想查詢該表用一個簡單的選擇查詢:爲什麼PostgreSQL SELECT查詢在指定模式名稱時返回不同的結果?

select * from table_name; 

我得到結果了一把看起來像:

column_a | column_b 
---------+--------- 
'a value'|'b_value' 

但是,當我使用此查詢:

select * from schema_name.table_name; 

我得到充分的結果:

column_a | column_b | column_c | column_d 
---------+----------+----------+--------- 
'a value'|'b value' |'c value' |'d_value' 

在最初的表格創建之後,在稍後的日期添加了列cd。我的問題是:爲什麼當模式名稱被排除在select查詢之外時,數據庫會忽略後面的列?

+2

你確定你沒有兩個表或視圖具有相同的名稱,在不同的模式? – IMSoP

回答

5

表名在Postgres的數據庫中並不是唯一的。在不同模式中可以有任意數量的名爲'table_name'的表 - 包括臨時模式,除非您在search_path中的其他模式之後明確列出臨時模式。顯然,有多個表名爲table_name。你必須瞭解的search_path作用,以正確地解釋這一點:

第一個表家住在schema_name之前來架構您的search_path(或schema_name沒有被列入其中,在所有)。因此,非限定表名將解析爲此表(或視圖)。檢查名爲「表名」表的列表,你當前角色有在你的數據庫訪問:

SELECT * 
FROM information_schema.tables 
WHERE table_name = 'table_name'; 

看法與內部附加RULE只是特殊表。他們可以扮演與常規表相同的角色,幷包含在上述查詢中。 詳情:

+0

這使我發現有一些名稱重複的表被無意中放置在公共模式中。謝謝。 –

相關問題