みなさんは、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」でテーブル一覧を表示・抽出してみてください。