すべてを一覧表示する場合 テーブル、使用する必要があります:
\dt *.*
すべてのスキーマのすべてのテーブルが必要であることを示します 。これには、pg_catalog
のテーブルが含まれます 、システムテーブル、およびinformation_schema
のテーブル 。 「すべてのユーザー定義スキーマのすべてのテーブル」を言う組み込みの方法はありません。ただし、search_path
を設定することはできます \dt
を実行する前に、対象のすべてのスキーマのリストに移動します 。
これをプログラムで実行することをお勧めします。その場合、psql
バックスラッシュ-コマンドはその仕事をしません。ここでINFORMATION_SCHEMA
救助に来る。テーブルを一覧表示するには:
SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
ところで、psql
が何であるかを知りたい場合は バックスラッシュコマンドに応答して実行している場合は、psql
を実行します -E
を使用 国旗。例:
$ psql -E regress
regress=# \list
********* QUERY **********
SELECT d.datname as "Name",
pg_catalog.pg_get_userbyid(d.datdba) as "Owner",
pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding",
d.datcollate as "Collate",
d.datctype as "Ctype",
pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges"
FROM pg_catalog.pg_database d
ORDER BY 1;
**************************
そのpsql
を見ることができます pg_catalog.pg_database
を検索しています データベースのリストを取得するとき。同様に、特定のデータベース内のテーブルの場合:
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' WHEN 'f' THEN 'foreign table' 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;
SQL標準の移植可能なINFORMATION_SCHEMA
を使用することをお勧めします 可能な場合はPgシステムカタログの代わりに、Pg固有の情報が必要になる場合があります。そのような場合は、システムカタログを直接クエリし、psql -E
を実行することで問題ありません。 その方法についての役立つガイドになる可能性があります。