PostgreSQLでテーブル一覧を表示する

PostgreSQLでテーブル一覧を表示する プログラミング

みなさんは、PostgreSQLでテーブル名をイチイチ覚えていますか?
よく使うテーブルなら、勝手に覚えてしまいますけどね。

でも、私は基本的にはテーブル名を覚えていません。
そもそも、覚えようとはしていません。

一部のキーワードさえ覚えてしまえば、テーブル名はそれで十分です。
そのため、テーブル一覧を表示するコマンドを重宝しています。

テーブル一覧をざっと表示して、そこから選ぶという形です。
あとは、テーブル名の検索も便利ですね。

本記事の内容

  • 検証用データベースについて
  • 「\d」でテーブル一覧を表示する
  • 「\dt」でテーブル一覧を表示する
  • 「pg_tables」でテーブル一覧を表示する

それでは、上記に沿って解説していきます。

検証用データベースについて

実際にコマンドやクエリを発行しながら、確認することが理想です。
技術なんて、実際に使ってナンボです。

検証用のデータベースがあれば、それを使ってください。
もし、そのようなデータベースがなければ、次の記事をご覧ください。

サンプルデータベースを簡単に用意できます。
テーブル数は、全部で15個です。
また。テーブル以外にビューやシーケンスも存在しています。

本記事では、このサンプルデータベースをもとにコマンドやクエリを確認します。

「\d」でテーブル一覧を表示する

テーブル一覧の全容を表示する際に、「\d」を使うことがあります。

dvdrental=# \d
                     List of relations
 Schema |            Name            |   Type   |  Owner
--------+----------------------------+----------+----------
 public | actor                      | table    | postgres
 public | actor_actor_id_seq         | sequence | postgres
 public | actor_info                 | view     | postgres
 public | address                    | table    | postgres
 public | address_address_id_seq     | sequence | postgres
 public | category                   | table    | postgres
 public | category_category_id_seq   | sequence | postgres
 public | city                       | table    | postgres
 public | city_city_id_seq           | sequence | postgres
 public | country                    | table    | postgres
 public | country_country_id_seq     | sequence | postgres
 public | customer                   | table    | postgres
 public | customer_customer_id_seq   | sequence | postgres
 public | customer_list              | view     | postgres
 public | film                       | table    | postgres
 public | film_actor                 | table    | postgres
 public | film_category              | table    | postgres
 public | film_film_id_seq           | sequence | postgres
 public | film_list                  | view     | postgres
 public | inventory                  | table    | postgres
 public | inventory_inventory_id_seq | sequence | postgres
 public | language                   | table    | postgres
 public | language_language_id_seq   | sequence | postgres
 public | nicer_but_slower_film_list | view     | postgres
 public | payment                    | table    | postgres
 public | payment_payment_id_seq     | sequence | postgres
 public | rental                     | table    | postgres
 public | rental_rental_id_seq       | sequence | postgres
 public | sales_by_film_category     | view     | postgres
 public | sales_by_store             | view     | postgres
 public | staff                      | table    | postgres
 public | staff_list                 | view     | postgres
 public | staff_staff_id_seq         | sequence | postgres
 public | store                      | table    | postgres
 public | store_store_id_seq         | sequence | postgres
(35 rows)

でも、不要な情報も表示されています。
ビュー(view)は、まだテーブル一覧として表示しても許容されます。

しかし、シーケンス(sequence)を触ることはほとんどありません。
所詮は、自動採番の管理テーブルに過ぎませんからね。

よって、テーブル数が多い場合、「\d」は適切ではないかもしれません。
テーブル一覧が一画面で収まらないことが普通にあり得ますので。

以下では、PostgreSQLでテーブル一覧を確認するための別の方法を見ていきます。

「\dt」でテーブル一覧を表示する

「\d」に「t」を追加します。
このことにより、テーブル(table)だけに絞ることができます。

dvdrental=# \dt
             List of relations
 Schema |     Name      | Type  |  Owner
--------+---------------+-------+----------
 public | actor         | table | postgres
 public | address       | table | postgres
 public | category      | table | postgres
 public | city          | table | postgres
 public | country       | table | postgres
 public | customer      | table | postgres
 public | film          | table | postgres
 public | film_actor    | table | postgres
 public | film_category | table | postgres
 public | inventory     | table | postgres
 public | language      | table | postgres
 public | payment       | table | postgres
 public | rental        | table | postgres
 public | staff         | table | postgres
 public | store         | table | postgres
(15 rows)

「\d」を利用する場合よりも、断然見やすくなりました。
「\dt」でテーブル一覧を表示することは、これでわかったと思います。

念のため、ビュー一覧とシーケンス一覧を表示する方法も確認しましょう。
ビュー(view)一覧を表示する場合は、「\d」に「v」をつけます。

dvdrental=# \dv
                   List of relations
 Schema |            Name            | Type |  Owner
--------+----------------------------+------+----------
 public | actor_info                 | view | postgres
 public | customer_list              | view | postgres
 public | film_list                  | view | postgres
 public | nicer_but_slower_film_list | view | postgres
 public | sales_by_film_category     | view | postgres
 public | sales_by_store             | view | postgres
 public | staff_list                 | view | postgres
(7 rows)

同様に、シーケンス(sequence)一覧を表示する場合は、「\d」に「s」をつけます。

dvdrental=# \ds
                     List of relations
 Schema |            Name            |   Type   |  Owner
--------+----------------------------+----------+----------
 public | actor_actor_id_seq         | sequence | postgres
 public | address_address_id_seq     | sequence | postgres
 public | category_category_id_seq   | sequence | postgres
 public | city_city_id_seq           | sequence | postgres
 public | country_country_id_seq     | sequence | postgres
 public | customer_customer_id_seq   | sequence | postgres
 public | film_film_id_seq           | sequence | postgres
 public | inventory_inventory_id_seq | sequence | postgres
 public | language_language_id_seq   | sequence | postgres
 public | payment_payment_id_seq     | sequence | postgres
 public | rental_rental_id_seq       | sequence | postgres
 public | staff_staff_id_seq         | sequence | postgres
 public | store_store_id_seq         | sequence | postgres
(13 rows)

何も問題ありませんね。

しかし、データベースに多くのテーブルが存在する場合、「\dt」でも不便なことがあります。
画面(コンソール)に収まりきらないようなケースですね。

このようなケースの場合、検索するのが有効です。
その方法を以下で説明します。

「pg_tables」でテーブル一覧を表示する

「pg_tables」ビューには、データベース内のテーブル情報が登録されています。
このビューから、テーブル一覧を表示するということです。

dvdrental=# select schemaname, tablename from pg_tables where tablename not like 'pg_%' and schemaname not like 'information_%';
 schemaname |   tablename
------------+---------------
 public     | staff
 public     | category
 public     | film_category
 public     | country
 public     | actor
 public     | language
 public     | inventory
 public     | payment
 public     | rental
 public     | city
 public     | store
 public     | film
 public     | address
 public     | film_actor
 public     | customer
(15 rows)

上記は、PostgreSQLが自動的に作成するモノを除外するクエリです。
除外して残ったモノが、作成したテーブル一覧となります。

上記のクエリへ条件を加えれば、さらに絞り込むことができます。
例えば、以下のクエリでは「actor」をテーブル名に含むモノだけを抽出しています。

dvdrental=# select schemaname, tablename from pg_tables where tablename not like 'pg_%' and schemaname not like 'information_%' and tablename like '%actor%';
 schemaname | tablename
------------+------------
 public     | actor
 public     | film_actor
(2 rows)

簡単ですね。
でも、地味に便利です。

状況に応じて、「pg_tables」でテーブル一覧を表示・抽出してみてください。

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