回答:
以下からのpsql
コマンド・ライン・インターフェース、
まず、データベースを選択します
\c database_name
次に、現在のスキーマのすべてのテーブルが表示されます。
\dt
プログラムで(psql
もちろん、インターフェースからも):
SELECT * FROM pg_catalog.pg_tables;
システムテーブルはpg_catalog
データベースにあります。
\l
と同等ですshow databases
。 dt
≃ show tables
と l
≃show databases
\dt
とても便利です。pg_catalog.pg_tables
接続されているデータベースに関係なく、内部テーブルとユーザーが作成したテーブルがひとまとめになっているように見えるので、その数ははるかに少なくなります。
psql my_db_name
動作させるため\dt
に実行する必要があります。私が走ったときにpsql
データベース名を指定せずに、私はメッセージ「いいえ関係が見つかった」だ
SELECT * FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'
\c <DATABASE_NAME>
データベースを選択する必要があります。
(完全を期すため)
SELECT
table_schema || '.' || table_name
FROM
information_schema.tables
WHERE
table_type = 'BASE TABLE'
AND
table_schema NOT IN ('pg_catalog', 'information_schema');
PostgreSQLのインタラクティブターミナルPsqlを使用して、PostgreSQLのテーブルを表示できます。
1. Psqlを起動します
通常、次のコマンドを実行してpsqlに入力できます。
psql DBNAME USERNAME
例えば、 psql template1 postgres
考えられる状況の1つは、rootとしてログインしていて、データベース名を覚えていないとします。最初にPsqlに入るには、次のコマンドを実行します。
sudo -u postgres psql
一部のシステムでは、sudoコマンドを使用できません。代わりに、以下のいずれかのコマンドを実行できます。
psql -U postgres
psql --username=postgres
2.テーブルを表示
Psqlでは、次のようなコマンドを実行できます。
\?
すべてのコマンドを一覧表示する\l
データベースの一覧表示\conninfo
現在の接続に関する情報を表示する\c [DBNAME]
新しいデータベースに接続します。 \c template1
\dt
パブリックスキーマのテーブルを一覧表示する\dt <schema-name>.*
特定のスキーマのテーブルをリストします。 \dt public.*
\dt *.*
すべてのスキーマのテーブルを一覧表示するSELECT * FROM my_table;
(例:ステートメントはセミコロンで終了する必要があります;
)\q
psqlを終了する-Eフラグを指定してpsqlを実行すると、\ dtなどを実装するために内部的に使用されるクエリがエコーされます。
sudo -u postgres psql -E
postgres=# \dt
********* QUERY **********
SELECT n.nspname as "Schema",
c.relname as "Name",
CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' END as "Type",
pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','')
AND n.nspname <> 'pg_catalog'
AND n.nspname <> 'information_schema'
AND n.nspname !~ '^pg_toast'
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;
**************************
すべてのデータベースとそのスキーマを確認できるように、スーパーユーザーとしてログインします。
sudo su - postgres
次に、次のコマンドを使用してpostgresqlシェルにアクセスできます。
psql
次のコマンドを使用して、すべてのデータベースリストを確認できます。
\l
データベースのサイズもチェックしたい場合は、以下を使用してください:
\l+
押すq
と戻ります。
データベースが見つかったら、次のコマンドを使用してそのデータベースに接続できます。
\c database_name
接続したら、次の方法でデータベーステーブルまたはスキーマを確認できます。
\d
シェルに戻るには、次のようにします。
q
次に、特定のテーブルの詳細をさらに確認するには、次のようにします。
\d table_name
postgresql_shellに戻るには、を押し\q
ます。
ターミナルに戻るには、を押しexit
ます。
作成したテーブルのリストのみを表示したい場合は、次のように言うだけです。
\dt
しかし、PATTERN
どのテーブルを表示するかをカスタマイズするのに役立つ方法もあります。pg_catalog
スキーマを含むすべてを表示するには、を追加でき*
ます。
\dt *
もしあなたがそうするなら: \?
\ dt [S +] [PATTERN]リストテーブル
テーブルのみを使用してください
=> \dt
スキーマテーブルを見たい場合
=>\dt+
特定のスキーマテーブルを表示する場合
=>\dt schema_name.*
+
していると思いますS
。後者(文字)はスキーマテーブルを示します。+
単に余分な情報が表示されます。
最初に、次のコマンドを使用してデータベースに接続します
\c database_name
そして、あなたはこのメッセージを見ます- You are now connected to database database_name
。そして、彼らは次のコマンドを実行します
SELECT * FROM table_name;
database_nameとtable_nameでは、データベースとテーブル名で更新するだけです
PostgreSQLでpgAdmin4を使用している場合、これを使用してデータベース内のテーブルを表示できます。
select * from information_schema.tables where table_schema='public';
\dt
単独では、使用しているデータベースのパブリックスキーマのテーブルがリストされることに注意してください。テーブルを別々のスキーマに保持したいので、受け入れられた答えはうまくいきませんでした。
特定のスキーマ内のすべてのテーブルを一覧表示するには、以下を行う必要があります。
1)目的のデータベースに接続します。
psql mydb
2)\dt
コマンドの後にテーブルを表示するスキーマ名を次のように指定します。
\dt myschema.*
これは私が興味のある結果を示しています:
List of relations
Schema | Name | Type | Owner
----------+-----------------+-------+----------
myschema | users | table | postgres
myschema | activity | table | postgres
myschema | roles | table | postgres
select
*
from
pg_catalog.pg_tables
where
schemaname != 'information_schema'
and schemaname != 'pg_catalog';
\ dt(*は不要)-すでに接続している既存のデータベースのすべてのテーブルをリストします。次の点にも注意してください。
\ d [table_name]-型情報、参照、キー制約を含む、指定されたテーブルのすべての列を表示します。
迅速なワンライナーとして
# just list all the postgres tables sorted in the terminal
db='my_db_name'
clear;psql -d $db -t -c '\dt'|cut -c 11-|perl -ne 's/^([a-z_0-9]*)( )(.*)/$1/; print'
または、より明確なjson出力マルチライナーを好む場合:
IFS='' read -r -d '' sql_code <<"EOF_CODE"
select array_to_json(array_agg(row_to_json(t))) from (
SELECT table_catalog,table_schema,table_name
FROM information_schema.tables
ORDER BY table_schema,table_name ) t
EOF_CODE
psql -d postgres -t -q -c "$sql_code"|jq