【実例付】PostgreSQLのテーブル一覧を取得する方法

※本サイトにはプロモーション・広告が含まれています。

(最終更新日:2023年6月)

✔このような方へ向けて書かれた記事となります

「PostgreSQLのテーブル一覧ってどのように表示するのだろうか?」
「PostgreSQLのテーブル一覧の取得方法が知りたい」
「PostgreSQLのテーブル一覧表示の実例が見たい」

✔当記事を通じてお伝えすること

  • PostgreSQLのテーブル一覧表示の基本
  • PostgreSQLのテーブル一覧取得のコマンドやその応用
  • PostgreSQLのテーブル一覧表示の実例

当記事では、PostgreSQLのテーブル一覧表示の基本から、さまざまな方法やオプションを活用した取得方法まで、具体例を用いて詳しく解説しています。

ぜひ最後までご覧ください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロジェクトマネージャー/SE(元外資系金融機関営業)

【副業】ブログ(月間15万PV)/YouTube/Web・アプリ制作

コミュニケーション × ビジネススキル × 文章力 × プログラミングスキルを活かし、30後半からのIT系職へシフト。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

PostgreSQLのテーブルを理解するための基礎知識

この章では、まずPostgreSQLの基本的な知識とテーブルについて解説します。

また、テーブル一覧を取得する理由とその必要性も理解していきましょう。

  • PostgreSQLとは?
  • テーブルとは?
  • テーブル一覧が必要な理由

PostgreSQLとは?

PostgreSQLとは、オープンソースのリレーショナルデータベース管理システム(RDBMS)であり、高度なSQL標準準拠を誇ります。

さらに、トランザクションとACID準拠を完全にサポートしており、大規模なDB操作を安全かつ信頼性高く実行することが可能です。

例えば、世界中の企業や組織がPostgreSQLを使用して、複雑なデータ分析や高度なデータ管理タスクを効率的におこなっています。

テーブルとは?

テーブルとは、データベースの基本的な構成要素で、行(レコード)と列(フィールド)で構成されています。

テーブルは、特定の主題に関連するデータをまとめて保存するためのものです。

たとえば、顧客情報を管理する「顧客テーブル」では、各行には個々の顧客データが、各列には顧客の名前や住所、電話番号などの特定の属性が格納されます。

テーブル一覧が必要な理由

テーブル一覧を取得することは、データベースの構造を理解し、データ分析や管理作業を効率的に行うために重要です。

特に大規模なデータベースでは、数百から数千のテーブルが存在することがほとんど。

それら全てを覚えておくのは困難であるため、テーブル一覧を取得して、必要なテーブルを素早く探し出せるようにすることが求められます。

また、テーブルの一覧を確認することで、データベースの全体像を把握し、どのテーブルがどの情報を持っているかを理解できます。

PostgreSQLでのテーブル一覧の取得方法

この章では、PostgreSQLでテーブル一覧を取得するための方法を詳しく解説します。

psqlコマンドを使用した手法とSQLクエリによる手法の2つを紹介し、その具体的な使い方とオプションについて説明します。

  • psqlコマンドを使った手法
  • SQLクエリによる手法

psqlコマンドを使った手法

PostgreSQLでは、psqlというコマンドラインインターフェイスが提供されており、これを用いてさまざまな操作を行うことが可能です。

その中の一つが、データベース内のテーブル一覧を取得する操作です。

  • \dtコマンドの基本的な使い方
  • \dtコマンドのオプション

\dtコマンドの基本的な使い方

psqlを起動した後、\dtコマンドを実行します。

現在選択しているデータベースのテーブル一覧が取得できるコマンドです。

例えば、次のように入力します。

$ psql -U postgres -d mydatabase
mydatabase=# \dt

これにより、テーブル名、オーナー、テーブルタイプ、アクセス権限等の情報が表示されます。

\dtコマンドのオプション

また、\dtコマンドにはオプションを付けることができ、さらに詳細な情報を取得することも可能です。

たとえば、\dt+コマンドを使用すると、テーブルの詳細情報(テーブルサイズやコメント等)を表示できます。

                     List of relations
 Schema |    Name     | Type  |  Owner   |    Size    | Description 
--------+-------------+-------+----------+------------+-------------
 public | employees   | table | postgres | 8192 bytes | Employees table
 public | customers   | table | postgres | 0 bytes    | Customers table
 public | orders      | table | postgres | 0 bytes    | Orders table
(3 rows)

SQLクエリによる手法

テーブル一覧の取得は、SQLクエリを用いて行うことも可能です。

pg_tablesとinformation_schema.tablesを利用した手法について説明します。

  • pg_tablesを利用する方法
  • information_schema.tablesを利用する方法
  • これらの手法の違いと使い分け
  • pg_tablesとinformation_schema.tablesの違い

pg_tablesを利用する方法

pg_tablesというビューを使用して、PostgreSQL内のテーブル一覧を取得する方法もあります。

このビューは、テーブル名だけでなく、スキーマ名やテーブル所有者の名前など、テーブルに関するさまざまな詳細情報も提供します。

以下のクエリでテーブル一覧を取得することができます。

SELECT schemaname, tablename 
FROM pg_tables 
WHERE schemaname NOT LIKE 'pg_%' 
AND schemaname != 'information_schema';

このクエリでは、pg_tablesビューからテーブル名(tablename)とそのテーブルが属するスキーマ名(schemaname)を取得します。

ただし、システム用のスキーマであるテーブルは取得しないようにフィルタリングが必要です。

以下、システム用のスキーマ。

  • pg_で始まるスキーマ
  • information_schemaスキーマ

information_schema.tablesを利用する方法

information_schema.tablesビューを用いて、テーブル一覧の取得もできます。

このビューはSQL標準で定義されており、さまざまなデータベースシステムで利用可能です。

このビューからテーブル一覞を取得するクエリは以下のようになります。

SELECT table_schema, table_name
FROM information_schema.tables 
WHERE table_schema NOT LIKE 'pg_%' 
AND table_schema != 'information_schema';

このクエリはpg_tablesを用いたクエリと同様に、テーブル名とスキーマ名を取得します。

ただしここでは、システム用のテーブルを除外するための条件が異なります。

information_schema.tablesでは、テーブルのスキーマ名がtable_schema、テーブル名がtable_nameとなります。

これらの手法の違いと使い分け

以上のように、テーブル一覧を取得する方法はいくつかありますが、それぞれに特徴と適した用途があります。

psql\dtコマンドはシンプルで直感的な操作が可能であり、手軽にテーブル一覧を確認したいときに便利です。

一方、SQLクエリを用いる方法は、取得する情報をカスタマイズしたり、特定の条件でフィルタリングしたりと、より柔軟な操作が可能です。

pg_tablesとinformation_schema.tablesの違い

pg_tablesinformation_schema.tablesの違いはこちら。

  • psg_tables:PostgreSQL固有の情報を多く含んでいる
  • information_schema.tables:SQL標準に準拠し、様々なデータベースシステムと同様の情報を提供

またinformation_schema.tablesは、テーブルだけでなくビューに関する情報も含んでいます。

結論としては以下を覚えておきましょう。

  • PostgreSQL特有の情報を必要とする場合や、PostgreSQLの内部構造について深く知りたい場合はpg_tables
  • 移植性が重要な場合やビューについての情報も取得したい場合はinformation_schema.tables

テーブル一覧を活用した実践的操作

テーブル一覧を得た後に何ができるのか、具体的な操作を紹介していきます。

具体的には以下のトピックを扱います。

  • 特定のスキーマにあるテーブルのみ表示する
  • テーブル名をフィルタリングして取得する
  • システムテーブルを取得する方法
  • カラム情報やインデックス情報を抽出する

特定のスキーマにあるテーブルのみ表示する

あるスキーマに所属するテーブルだけを取得したい場合は、スキーマ名を指定してフィルタリングします。

以下がその例です。

SELECT table_name
FROM information_schema.tables 
WHERE table_schema = 'your_schema';

このクエリは、指定したスキーマ(ここではyour_schema)に存在するテーブルの一覧を返します。

テーブル名をフィルタリングして取得する

また、特定のパターンにマッチするテーブル名のみを取得したい場合は、LIKE句を使用してフィルタリングすることができます。

例えば、「user」を含むテーブル名を全て取得するには次のようにします。

SELECT table_name
FROM information_schema.tables 
WHERE table_name LIKE '%user%';

このクエリは、「user」を含むすべてのテーブルの一覧を返します。

LIKEについて詳しく知りたい方はこちら。

システムテーブルを取得する方法

システムテーブルを取得する方法も具体的に見ていきます。

なぜならシステムテーブルも、重要な情報を持っているから。

システムテーブルを取得するには、これまで適用していたシステムテーブルを除外するフィルタを外します。

以下がそのクエリです。

SELECT table_schema, table_name 
FROM information_schema.tables 
WHERE table_schema LIKE 'pg_%' 
OR table_schema = 'information_schema';

このクエリは、pg_%で始まるスキーマとinformation_schemaスキーマに含まれる全てのテーブルを返します。

これにより、データベースの内部構造や動作に関する詳細な情報を取得できるのです。

カラム情報やインデックス情報を抽出する

また、テーブル一覧と共に、カラム情報やインデックス情報の取得も可能です。

これにはinformation_schema.columnspg_indexesなどのビューを使用します。

例えば、特定のテーブルの全てのカラム名とデータ型を取得するには、以下のようにします。

SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'your_table';

このクエリは、指定したテーブル(ここではyour_table)の全てのカラム名とそのデータ型を返します。

また、特定のテーブルのインデックス一覧を取得するには、以下のクエリを使用します。

SELECT indexname, indexdef 
FROM pg_indexes 
WHERE tablename = 'your_table';

このクエリは、指定したテーブル(ここではyour_table)に設定されている全てのインデックスの名前と定義を返します。

これにより、テーブルのパフォーマンスやデータの検索速度に影響を与えるインデックス情報を詳細に把握することが可能です。

まとめ

当記事でお伝えしてきた内容は以下のとおり。

  • psql\dtコマンドの使い方や例
  • SQLクエリを使ってpg_tablesまたはinformation_schema.tablesを問い合わせる方法
  • 2方法の使い分け方

初心者として、最初にマスターすべきはpsql\dtコマンドだと考えます。

これは最もシンプルで直感的な方法であり、SQLの知識を必要としません。

ただし時間とともに、SQLクエリを用いて更に詳細な情報を取得できるようになることを目指すべきです。

その際には、pg_tablesビューやinformation_schemaビューを活用し、より深いレベルでデータベースを理解しましょう。

タイトルとURLをコピーしました