【PostgreSQL】テーブル名とテーブルのコメントをまとめて表示する方法の紹介

スポンサーリンク

PostgreSQLに登録されているテーブル、コメント情報を取得するには、システムカタログという情報から取得することができます。

今回は、システムカタログを使用したテーブル、テーブルに設定されているコメントをまとめて取得する方法、使用するシステムカタログの一部についての解説を紹介していきます。

スポンサーリンク

検証環境

検証に使用した環境/ライブラリを次に記載します。

  • PostgreSQL
    • バージョン:12.4

取得方法

システムカタログを使用してテーブル一覧とテーブルのコメントを取得するためには、次のSQLを実行します。

select
  pg_class.relname
  , pg_description.description 
from
  pg_class 
  left outer join pg_description 
    on pg_class.oid = pg_description.objoid 
    and pg_description.objsubid = 0

取得した情報は、次になります。

  • pg_class.relnameは、テーブル名が取得できます。
  • pg_description.descriptionは、テーブルのコメントが取得できます。

スキーマ情報もあわせて取得する場合は、次のSQLを実行します。

select
  pg_namespace.nspname
  , pg_class.relname
  , pg_description.description 
from
  pg_class 
  inner join pg_namespace 
    on pg_class.relnamespace = pg_namespace.oid 
  left outer join pg_description 
    on pg_class.oid = pg_description.objoid 
    and pg_description.objsubid = 0

取得した情報は、次になります。

  • pg_namespace.nspnameは、スキーマの名称が取得できます。

取得するときに結合条件を使用しているのは、スキーマ、テーブル、コメントが別テーブルに登録されているためです。

pg_descriptionの取得は外部結合を指定しています。テーブルのコメントが設定されていないときでも、テーブル一覧を取得できるようにするためです。

システムカタログ

システムカタログは、スキーマ情報、テーブル、テーブルのコメント情報など、データベースやテーブルなどのさまざまな情報を保持しています。保持している情報については、次のドキュメントを参考にしてください。

ドキュメント:https://www.postgresql.jp/document/12/html/catalogs-overview.html

スキーマの取得

pg_namespaceは、名前空間(スキーマ)に関連する情報を取得できます。取得するためには、次のSQLを実行します。

select
  * 
from
  pg_namespace

pg_namespaceで取得できる情報については、次のドキュメントを参考にしてください。

ドキュメント:https://www.postgresql.jp/document/12/html/catalog-pg-namespace.html

テーブルの取得

pg_classは、テーブル、ビュー、インデックスなどに関連する情報を取得できます。取得するためには、次のSQLを実行します。

select
  *
from
  pg_class

pg_classで取得できる情報については、次のドキュメントを参考にしてください。

ドキュメント:https://www.postgresql.jp/document/12/html/catalog-pg-class.html

コメントの取得

pg_descriptionは、テーブルなどの補足説明(コメント)などを取得できます。取得するためには、次のSQLを実行します。

select
  * 
from
  pg_description 
where
  objsubid = 0

テーブルのコメントだけを取得する場合は、条件(where句)にobjsubid = 0を指定することで取得できます。

pg_descriptionで取得できる情報については、次のドキュメントを参考にしてください。

ドキュメント:https://www.postgresql.jp/document/12/html/catalog-pg-description.html

まとめ

PostgreSQLのシステムカタログを使用してテーブルとテーブルのコメントをまとめて取得する方法を紹介しました。