PostgreSQLの管理を学習しようとしていますが、psql
コマンドラインツールの使用方法を学習し始めました。
psql --username=postgres
でログインする場合、すべてのデータベースとテーブルを一覧表示するにはどうすればよいですか?
、d
、dS+
ですが、何も表示されません。 pgAdmin IIIを使用して2つのデータベースといくつかのテーブルを作成したので、それらをリストする必要があることはわかっています。
コメント
回答
次のコマンドに注意してください:
-
\list
または\l
:すべてのデータベースを一覧表示します -
\dt
:search_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セッションでのみですか?
- えーと、私はあまり明確ではありませんでした。ログアウト-ログインサイクルの代わりに意図されていました。
psql -l
を実行します。
psql --username=postgres -l
も可能です。