2013-10-25 7 views
0

이름, 소유자, 소유자의 수퍼 유저 상태 및 테이블 스페이스와 같은 데이터베이스 정보를 가져 오는 select 문이 있습니다. PostgreSQL 버전이 9.2 미만인 경우에도 테이블 공간 데이터 위치를 가져올 수 있었지만 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

가, 감사합니다. 나는 단지 oid 대신에 pg_tablespace.oid를 사용하는 것을 생각하지 않았다. –