PostgreSQL:PostgreSQLでテーブルを表示する


回答:


2661

以下からのpsqlコマンド・ライン・インターフェース、

まず、データベースを選択します

\c database_name

次に、現在のスキーマのすべてのテーブルが表示されます。

\dt

プログラムで(psqlもちろん、インターフェースからも):

SELECT * FROM pg_catalog.pg_tables;

システムテーブルはpg_catalogデータベースにあります。


102
@StephenCorwinいいえ、MySQL \lと同等ですshow databasesdtshow tableslshow databases
user454322

12
\dtとても便利です。pg_catalog.pg_tables接続されているデータベースに関係なく、内部テーブルとユーザーが作成したテーブルがひとまとめになっているように見えるので、その数ははるかに少なくなります。
aroth 2013

33
psql my_db_name動作させるため\dtに実行する必要があります。私が走ったときにpsqlデータベース名を指定せずに、私はメッセージ「いいえ関係が見つかった」だ
マクシム・ドミトリエフ

31
システムテーブルなし:SELECT * FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'
マットホワイト

39
最初に\c <DATABASE_NAME>データベースを選択する必要があります。
danio 2016

200

スーパーユーザーとしてログイン:

sudo -u postgres psql

\lコマンドごとにすべてのデータベースとユーザーを一覧表示できます(他のコマンドを\?)。

他のデータベースを表示したい場合は、の\cようなコマンドでユーザー/データベースを変更し\c template1\c postgres postgresを使用\d\dtたり\dS、テーブルやビューなどを表示したりできます。


1
一般的に複数のデータベースがインストールされている可能性があるため、これはより良い答えです。
ジェローム

これはとても役に立ちました。ありがとうございました。
プロミスプレストン

123

(完全を期すため)

(SQL標準)情報スキーマをクエリすることもできます

SELECT
    table_schema || '.' || table_name
FROM
    information_schema.tables
WHERE
    table_type = 'BASE TABLE'
AND
    table_schema NOT IN ('pg_catalog', 'information_schema');

3
+1ただし、完全を期すため、mysql show tablesは現在のスキーマのみを表示します。このように考えるとよいです。mysqlにはデータベースが1つしかありませんが、複数のスキーマがあり、postgresqlは複数のデータベース(カタログ)とスキーマを持つことができます。したがって、同等のものはtable_schema = 'DB_NAME'である必要があります。
ラーリー、2014年

正確には標準SQLではないため、「||」を使用できません mssqlで文字列を連結する
ChRoNoN

123

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では、次のようなコマンドを実行できます。

  1. \? すべてのコマンドを一覧表示する
  2. \l データベースの一覧表示
  3. \conninfo 現在の接続に関する情報を表示する
  4. \c [DBNAME] 新しいデータベースに接続します。 \c template1
  5. \dt パブリックスキーマのテーブルを一覧表示する
  6. \dt <schema-name>.* 特定のスキーマのテーブルをリストします。 \dt public.*
  7. \dt *.* すべてのスキーマのテーブルを一覧表示する
  8. 次に、SQLステートメントを実行できますSELECT * FROM my_table;(例:ステートメントはセミコロンで終了する必要があります;
  9. \q psqlを終了する

52
  1. postgresユーザーとして最初にログインします。

    sudo su - postgres

  2. 必要なデータベースに接続します。 psql -d databaseName

  3. \dt 接続しているデータベース内のすべてのテーブルのリストを返します。


40

-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;        
**************************

1
ところで、TOASTは大きな値を格納するために使用されます:postgresql.org/docs/8.3/static/storage-toast.html
Dorian

39

すべてのデータベースとそのスキーマを確認できるように、スーパーユーザーとしてログインします。

sudo su - postgres

次に、次のコマンドを使用してpostgresqlシェルにアクセスできます。

psql

次のコマンドを使用して、すべてのデータベースリストを確認できます。

\l

データベースのサイズもチェックしたい場合は、以下を使用してください:

\l+

押すqと戻ります。

データベースが見つかったら、次のコマンドを使用してそのデータベースに接続できます。

\c database_name

接続したら、次の方法でデータベーステーブルまたはスキーマを確認できます。

\d

シェルに戻るには、次のようにします。

q

次に、特定のテーブルの詳細をさらに確認するには、次のようにします。

\d table_name

postgresql_shellに戻るには、を押し\qます。

ターミナルに戻るには、を押しexitます。


24

作成したテーブルのリストのみを表示したい場合は、次のように言うだけです。

\dt

しかし、PATTERNどのテーブルを表示するかをカスタマイズするのに役立つ方法もあります。pg_catalogスキーマを含むすべてを表示するには、を追加でき*ます。

\dt *

もしあなたがそうするなら: \?

\ dt [S +] [PATTERN]リストテーブル


23

テーブルのみを使用してください

=> \dt

スキーマテーブルを見たい場合

=>\dt+

特定のスキーマテーブルを表示する場合

=>\dt schema_name.* 

あなたはと混同+していると思いますS。後者(文字)はスキーマテーブルを示します。+単に余分な情報が表示されます。
Garret Wilson

20

最初に、次のコマンドを使用してデータベースに接続します

\c database_name

そして、あなたはこのメッセージを見ます- You are now connected to database database_name。そして、彼らは次のコマンドを実行します

SELECT * FROM table_name;

database_nameとtable_nameでは、データベースとテーブル名で更新するだけです


20
これが質問に答えているかどうかはわかりません。OPは(彼の)データベース内のすべてのテーブルを把握しようとしているのだと思います。彼のデータベース内の特定のテーブルからすべての行を取得するのではなく...
2014年

16

PostgreSQLでpgAdmin4を使用している場合、これを使用してデータベース内のテーブルを表示できます。

select * from information_schema.tables where table_schema='public';

14

\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


8

\ dt(*は不要)-すでに接続している既存のデータベースのすべてのテーブルをリストします。次の点にも注意してください。

\ d [table_name]-型情報、参照、キー制約を含む、指定されたテーブルのすべての列を表示します。


6

現在のデータベースのテーブルをリストすることができます \dt

Fwiwは、MySQLの\d tablenameようshow columns from tablenameに、指定されたテーブルの詳細を表示しますが、もう少し情報が表示されます。


5

psqlの使用:\ dt

または:

SELECT c.relname AS Tables_in FROM pg_catalog.pg_class c
        LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE pg_catalog.pg_table_is_visible(c.oid)
        AND c.relkind = 'r'
        AND relname NOT LIKE 'pg_%'
ORDER BY 1

3

まず第一にあなたはあなたのデータベースに接続する必要があります

私のデータベースはubuntuです

このコマンドを使用して接続します

 \c ubuntu

このメッセージは表示されます

"ユーザー" postgres "としてデータベース" ubuntu "に接続されました。"

このコマンドを実行して、その中のすべてのテーブルを表示します

\d+

3

コマンドラインですべてのテーブルを一覧表示する最も簡単な方法は、私の好みです。

psql -a -U <user> -p <port> -h <server> -c "\dt"

特定のデータベースについては、データベース名を追加するだけです。

psql -a -U <user> -p <port> -h <server> -c "\dt" <database_name>

LinuxとWindowsの両方で動作します。


3

迅速なワンライナーとして

# 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

1

\ dtはテーブルを一覧表示し、 "\ pset pager off"は別のテーブルに切り替えることなく、同じウィンドウにそれらを表示します。dbshel​​lでその機能を死ぬまで愛してください。



0

まず、接続する必要があるデータベースを入力します

\c database_name

次に、現在のスキーマのすべてのテーブルが表示されます。

\dt

-2

まず、Macのpostgre.appを使用するか、posticoを使用して、postgresデータベースに接続できます。次のコマンドを実行します。

psql -h localhost -p port_number -d database_name -U user_name -W

次にパスワードを入力すると、データベースにアクセスできるようになります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.