PostgreSQLのFDW外部サーバはpg_foreign_serverで一覧できる

  • PostgreSQL
  • FDW

この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。

やりたいこと

PostgreSQLに登録済みのFDW(Foreign Data Wrapper)の外部サーバを一覧したかった。

クエリ

select * from pg_foreign_server;

これだけで、登録済みの外部サーバが全部出てくる。

出力例

srvname | srvowner | srvfdw | srvtype | srvversion | srvacl | srvoptions
------------+----------+--------+---------+------------+----------+---------------------------------------------------
example_db | 16384 | 16401 | | | | {host=example.internal,port=5432,dbname=example}
(1 row)

出てくるカラム

カラム 内容
srvname サーバ名
srvowner 所有者ロールのOID
srvfdw 紐づくFDW拡張のOID(pg_foreign_data_wrapper側のOID)
srvtype / srvversion 任意項目。設定していなければNULL
srvacl 権限(GRANT/REVOKEの結果)
srvoptions host=example.internalのような接続オプションが配列で入っている。host、port、dbnameあたりが典型

srvfdwはOIDなので、FDW拡張名(postgres_fdwなど)まで見たいならpg_foreign_data_wrapperとJOINする必要がある。

関連するビュー

  • 使っているFDW拡張自体の一覧はpg_foreign_data_wrapper
  • 作成済みの外部テーブルはpg_foreign_table
  • 標準規格準拠で見るならinformation_schema.foreign_serversもある。ただしこちらはsrvoptionsの中身が縦持ちのoption行になっていて見づらいので、実務ではpg_foreign_serverを直接叩いた方が早い

わかったこと

外部サーバの棚卸しをしたいだけなら、拡張のカタログを跨がずpg_foreign_server単体で十分。接続先のホストやポートまで一目で確認できる。