2013-10-25 69 views
0

我有一個選擇語句,用於撤回數據庫信息,如名稱,所有者,所有者的超級用戶狀態和表空間。對於小於9.2的Postgresql版本,我還能夠獲取表空間數據位置,但使用9.2,他們已經改變了它,以便它是一個函數調用。我當前的查詢是:Postgresql/SQL在選擇查詢中運行系統目錄功能

SELECT pg_database.datname as Database_Name, pg_authid.rolname as Database_Owner, 
pg_authid.rolsuper as IsSuperUser, pg_tablespace.spcname as TableSpaceName, 
pg_catalog.pg_tablespace_location(oid) as TableSpaceLocation 
FROM pg_database 
JOIN pg_authid on pg_database.datdba = pg_authid.oid 
CROSS JOIN pg_tablespace 
WHERE datistemplate = false 
AND pg_database.dattablespace = pg_tablespace.oid; 

其中函數調用是SELECT語句的最後一部分。但我發現了一個錯誤:

ERROR: column "oid" does not exist 
LINE 3:  pg_catalog.pg_tablespace_location(oid) as TableSpaceLoca... 

當我嘗試和運行這個,我不知道如何讓表空間的位置,因爲這查詢的一部分。如果我自己運行此功能:

SELECT pg_catalog.pg_tablespace_location(oid) as "Location" 
FROM pg_catalog.pg_tablespace 

我得到了正確的響應。有任何想法嗎?

回答

0

請試試這個:

SELECT pg_database.datname as Database_Name, pg_authid.rolname as Database_Owner, 
pg_authid.rolsuper as IsSuperUser, pg_tablespace.spcname as TableSpaceName, 
pg_catalog.pg_tablespace_location(pg_tablespace.oid) as TableSpaceLocation 
FROM pg_database 
JOIN pg_authid on pg_database.datdba = pg_authid.oid 
CROSS JOIN pg_tablespace 
WHERE datistemplate = false 
AND pg_database.dattablespace = pg_tablespace.oid; 
+0

這工作,謝謝。我沒有想到使用pg_tablespace.oid而不是僅僅是oid。 –