名前、所有者、所有者のスーパーユーザー ステータス、テーブルスペースなどのデータベース情報を取得する select ステートメントがあります。Postgresql のバージョンが 9.2 未満の場合、テーブルスペースのデータの場所をプルすることもできましたが、9.2 では代わりに関数呼び出しになるように変更されました。私の現在のクエリは次のとおりです。
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
ちゃんと返事がきます。何か案は?