psqlを使用してすべてのデータベースとテーブルを一覧表示するにはどうすればよいですか?


1171

私はPostgreSQLの管理を学びたいと思っており、psqlコマンドラインツールの使い方を学び始めました。

でログインするときにpsql --username=postgres、すべてのデータベースとテーブルをリストするにはどうすればよいですか?

私が試してみました\dddS+は何も表示されていません。pgAdmin IIIで2つのデータベースといくつかのテーブルを作成したので、それらをリストする必要があることはわかっています。


1
コマンドラインからアクセスする場合は、次を実行しますpsql -l
adriaan

このコメントは間違いなく一番の答えの1つです。認証が必要な場合もできますpsql --username=postgres -l
ユリスBN

回答:


1543

次のコマンドに注意してください。

  • \listまたは\l:すべてのデータベースをリストする
  • \dt:現在のデータベース内のすべてのテーブルをリストする

他のデータベースのテーブルは表示されません。これらのテーブルは表示されません。テーブル(およびその他のオブジェクト)を表示するには、正しいデータベースに接続する必要があります。

データベースを切り替えるには:

\connect database_name または \c database_name

psqlに関するマニュアルを参照してください。


131
\c db_name特定のデータベースへの接続に使用できます。
eikes

17
\dt現在のデータベース内のすべてのテーブルをリストするようには見えません(search_path少なくとも9.2で見つからないテーブルを除外しているようです)
ジャックダグラス

22
\dt *.検索パスを変更せずに、すべてのスキーマのすべてのテーブルをリストします。
ダンペロタ

19
\ l +は私のお気に入りです。ディスクの使用状況も表示されます。
レスターチャン

1
Windowsでは、このコマンドを使用してデータベースを一覧表示できますpsql -U username -lが、スラッシュバージョンでは機能しません。
NoName15年

350

これはデータベースをリストします:

SELECT datname FROM pg_database
WHERE datistemplate = false;

これは、現在のデータベース内のテーブルをリストします

SELECT table_schema,table_name
FROM information_schema.tables
ORDER BY table_schema,table_name;

11
そのとおりですが、質問はpsql-toolのメタコマンドに関するものでした。\ dtは、クエリを入力するよりもはるかに簡単です。
フランクハイケンズ

19
ExtraPuttyを使用してハングすることがあるpsqlインタープリターを使用する必要がなく、Linuxコマンドラインから実行できるため、これは素晴らしい答えだと思います。
愛と平和-ジョーコードズウェル

2
また、私の一日を救った。私の特定のケースでは、WHERE table_schema = 'public'カスタムテーブルだけをドロップしたいので追加しています。
-Renra

29
-Eフラグを指定してpsqlを起動すると、メタコマンドを使用したときに実際のクエリが表示されます。
Deebster

これは良い答えです。OPはメタコマンドを必要としていましたが、私はこれをグーグルで探していたため、この質問に至りました。
アカウントを捨てる

109

Postgresqlでは、これらの端末コマンドは利用可能なデータベースをリストします

el@defiant$ /bin/psql -h localhost --username=pgadmin --list

または、コマンドはより簡単に述べました:

psql -U pgadmin -l

これらのコマンドはこれを端末に出力します:

                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 kurz_prod | pgadmin  | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 pgadmin   | pgadmin  | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(5 rows)

これらは利用可能なデータベースです。

PSQLでは、これらのコマンドは使用可能なテーブルをリストします

データベース内のテーブルをリストする前に、データベースを指定する必要があります。

el@defiant$ psql -U pgadmin -d kurz_prod

これにより、psqlターミナルが表示されます。

kurz_prod=#

\dすべてのテーブル、ビュー、およびシーケンスを表示するコマンドの意味を使用します

kurz_prod=# \d

これは印刷します:

           List of relations
Schema |  Name   |   Type   |  Owner
--------+---------+----------+---------
public | mytable | table    | pgadmin
public | testing | sequence | pgadmin
(2 rows)

次に、psqlターミナルを終了するには、\q入力してEnter キーを押します。またはCtrl-D同じことをします。これらは、そのデータベース内のテーブルです。


4
\ dはテーブルをリストするだけではありません:\d[S+] list tables, views, and sequences
ジャックダグラス

3
私にとって、これは既存のデータベースに既に接続している必要がないため、「正しい」答えです。
aardvarkk


35

データベースとテーブルのリストに関する詳細情報を得るには、次を実行できます。

\l+ データベースをリストする

                                                                    List of databases
    Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   |  Size   | Tablespace |                Description
------------+----------+----------+-------------+-------------+-----------------------+---------+------------+--------------------------------------------
 pgbench    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 29 MB   | pg_default |
 postgres   | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 6073 kB | pg_default | default administrative connection database
 slonmaster | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 1401 MB | movespace  |
 slonslave  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 32 MB   | pg_default |
 template0  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +| 5785 kB | pg_default | unmodifiable empty database
            |          |          |             |             | postgres=CTc/postgres |         |            |
 template1  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +| 5985 kB | pg_default | default template for new databases
            |          |          |             |             | postgres=CTc/postgres |         |            |
 test       | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 13 MB   | pg_default |
(7 rows)

そして

\d+ 現在のデータベースの現在のsearch_pathスキーマ内のすべてのテーブルをリストします。

test=# \dn+ --list schemas
                          List of schemas
  Name  |  Owner   |  Access privileges   |      Description       
--------+----------+----------------------+------------------------
 public | postgres | postgres=UC/postgres+| standard public schema
        |          | =UC/postgres         | 
schema1 | postgres | postgres=UC/postgres+| 
        |          | =UC/postgres         | 
(2 row)

test=# set search_path to schema1, public;
SET
test=# \d+
                                  List of relations
     Schema  |      Name       | Type  |    Owner     |    Size    | Description
    ---------+-----------------+-------+--------------+------------+-------------
     public  | all_units       | table | postgres     | 0 bytes    |
     public  | asset           | table | postgres     | 16 kB      |
     public  | asset_attribute | table | postgres     | 8192 bytes |
     public  | food            | table | postgres     | 48 kB      |
     public  | name_log        | table | postgres     | 8192 bytes |
     public  | outable         | table | ordinaryuser | 0 bytes    |
     public  | outable2        | table | ordinaryuser | 0 bytes    |
     public  | test            | table | postgres     | 16 kB      |
     public  | usr             | table | postgres     | 5008 kB    |
     schema1 | t1              | table | postgres     | 0 bytes    |
    (10 rows)

33

pg_Adminから現在のデータベースで次を実行するだけで、指定されたスキーマのすべてのテーブルを取得できます。

SELECT * 
FROM information_schema.tables 
WHERE table_type = 'BASE TABLE' 
    AND table_schema = 'public' 
ORDER BY table_type, table_name

これにより、すべての永続テーブル(通常は探しているテーブル)のリストが取得されます。*ワイルドカードをに変更すると、テーブル名のみを取得できますtable_name。パブリックtable_schemaは、管理者が新しいスキーマをセットアップしていない限り、ほとんどのデータベースのデフォルトのスキーマです。


3
これは事実ですが、これはOPが尋ねたものとは異なるクライアントに対応します。
-dezso

これは私にとってはうまくいきました。私のユースケースはOPが要求したものとはまったく異なりましたが、ラッパー(Julialang LibPQ.jlで)を介して接続しながらテーブルリストを取得するのに役立ちました
Vass

19

検索パスにないスキーマ、またはデフォルト(つまりpublic)にテーブルを挿入した可能性があるため、\ dtを使用してテーブルが表示されない可能性があります。たとえば、データと呼ばれるスキーマを使用する場合、これを実行して修正できます。

alter database <databasename> set search_path=data, public;

psqlを終了して再入力すると、スキーマデータのテーブルも\ dtに表示されます。


1
まあ、単純なset search_path=data, public;トリックも行うでしょう:)
dezso

@dezso、それは永久に変更を行いますか、それともそのpsqlセッションでのみですか?
ジョンパウエル14

エラーは、あまり明確ではありませんでした。ログアウト-ログインサイクルの代わりに意図されていました。
dezso
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.