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

PostgreSQLの管理を学習しようとしていますが、psqlコマンドラインツールの使用方法を学習し始めました。

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

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

コメント

  • アクセスする場合コマンドラインからpsql -l
  • を実行します。

  • このコメントは間違いなく上位の回答の1つです。認証が必要な場合は、psql --username=postgres -lも可能です。

回答

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

  • \listまたは\l:すべてのデータベースを一覧表示します
  • \dtsearch_path
  • search_path

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

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

\connect database_nameまたは\c database_name

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

コメント

  • \c db_nameを使用して特定のデータベースに接続できます。
  • \dtは’現在のデータベース内のすべてのテーブルが一覧表示されているようです(’ search_pathにないテーブルは除外されているようです。少なくとも9.2)
  • \dt *.は、検索パスを変更することなく、すべてのスキーマのすべてのテーブルを一覧表示します。
  • \ l + is私のお気に入り-ディスク使用量も表示されます。
  • Windowsでは、このコマンドpsql -U username -lを使用してデータベースを一覧表示できますが、スラッシュバージョンでは機能しません。

回答

データベースの一覧:

SELECT datname FROM pg_database WHERE datistemplate = false; 

これにより、現在のデータベース内のテーブルが一覧表示されます

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

コメント

  • あなた’は正しいですが、問題はpsql-toolのメタコマンドに関するものでした。 \ dtは、クエリを入力するよりもはるかに簡単です。
  • psqlインタープリターを使用する必要がなく、Linuxコマンドラインから実行できるため、これはすばらしい答えだと思います。 ExtraPutty。
  • また私の一日を救った。私の特定のケースでは、カスタムテーブルだけを削除したいので、’ WHERE table_schema = 'public'を追加しています。
  • 開始する場合-Eフラグを指定したpsqlの場合、メタコマンドを使用すると実際のクエリが表示されます。
  • はい、’良い答えだと思います。特に大きなデータベースリストからスクリプトを生成する場合は、より制御された方法でデータベースに参加してクエリを実行できます。ありがとう。

回答

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も同じことをします。これらはそのデータベース内のテーブルです。

コメント

  • \ dはテーブルを一覧表示するだけではありません:\d[S+] list tables, views, and sequences
  • 私にとって、これは”正しい”の答えです。’既存のデータベースにすでに接続している必要があります。
  • スクリプトで使用するための1つのライナー(ルートとして):su - -c 'psql -U postgres postgres -P pager=off -P tuples_only=on -l' postgres | cut -d'|' -f1 | tr -d '[:blank:]' | grep -vE '$^'

回答

\lも。 \?を使用してpsqlにリストできるスラッシュコマンドはかなりたくさんあります。

回答

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

\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) 

回答

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

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

これにより、すべての永続テーブル(通常は「探しているテーブル」)のリスト。*ワイルドカードを。管理者が新しいスキーマを設定していない限り、パブリックtable_schemaがほとんどのデータベースのデフォルトスキーマです。

コメント

  • これは真実ですが、これは別のクライアントに対応しますOPが尋ねたよりも。
  • これは私にとってはうまくいきました。私のユースケースはOPが求めていたものとは正確には一致しませんでしたが、ラッパーを介して接続しているときにテーブルリストを取得するのに役立ちました( Julialang) LibPQ.jl

回答

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

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

psqlを終了して再入力します。 \ dtはスキーマデータのテーブルも表示します。

コメント

  • まあ、単純なset search_path=data, public;もトリックを行います:)
  • @dezso、それは永続的に変更を行いますか、それともそのpsqlセッションでのみですか?
  • えーと、私はあまり明確ではありませんでした。ログアウト-ログインサイクルの代わりに意図されていました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です