私はPostgreSQLの管理について学び、psql
コマンドラインツールの使い方を学び始めました。
psql --username=postgres
を使用してログインする場合、すべてのデータベースとテーブルを一覧表示するにはどうすればよいですか?
\d
、d
、dS+
を試しましたが、何も表示されません。私はpgAdmin IIIで2つのデータベースといくつかのテーブルを作成したので、それらがリストされているはずです。
次のコマンドに注意してください。
\list
または\l
:すべてのデータベースを一覧表示します\dt
:search_path
を使用して、現在のデータベース内のすべてのテーブルを一覧表示します\dt *.
:search_path
に関係なく、現在のデータベース内のすべてのテーブルを一覧表示します他のデータベースのテーブルは表示されません。これらのテーブルは表示されません。テーブル(およびその他のオブジェクト)を表示するには、正しいデータベースに接続する必要があります。
データベースを切り替えるには:
\connect database_name
または\c database_name
psql に関するマニュアルを参照してください。
これはデータベースをリストします:
SELECT datname FROM pg_database
WHERE datistemplate = false;
現在のデータベースのテーブルを一覧表示します
SELECT table_schema,table_name
FROM information_schema.tables
ORDER BY table_schema,table_name;
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)
これらは利用可能なデータベースです。
データベース内のテーブルを一覧表示する前に、データベースを指定する必要があります。
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
も同じことを行います。これらはそのデータベースのテーブルです。
\l
は\list
の短縮形でもあります。かなりの数のスラッシュコマンドがあり、\?
を使用して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_name
のみに変更すると、テーブル名のみを取得できます。パブリックtable_schema
は、管理者が新しいスキーマを設定していない限り、ほとんどのデータベースのデフォルトスキーマです。
検索パスに含まれていないスキーマ、またはデフォルト、つまりパブリックにテーブルを挿入した可能性があるため、\ dtを使用してもテーブルは表示されません。たとえばデータと呼ばれるスキーマを使用する場合は、次のコマンドを実行して修正できます。
alter database <databasename> set search_path=data, public;
Psqlを終了して再入力すると、\ dtはスキーマデータのテーブルも表示します。