135

liferayPostgreSQL インストールのデータベース内のすべてのテーブルを一覧表示したいと考えています。それ、どうやったら出来るの?

SELECT * FROM applications;データベースで実行したいと思いliferayます。applications私のliferay dbのテーブルです。これはどのように行われますか?

これが私のすべてのデータベースのリストです。

postgres=# \list
                              List of databases
Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
 -----------+----------+----------+-------------+-------------+-----------------------
 liferay   | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =Tc/postgres         +
           |          |          |             |             | postgres=CTc/postgres+
           |          |          |             |             | liferay=CTc/postgres
 lportal   | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | 
 postgres  | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | 
 template0 | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(5 rows)

postgres=# 
4

6 に答える 6

221

すべてのテーブルを一覧表示する場合は、次を使用する必要があります。

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

INFORMATION_SCHEMA可能であれば、Pg システム カタログの代わりにSQL 標準の移植可能なカタログを使用することをお勧めしますが、Pg 固有の情報が必要になる場合もあります。そのような場合は、システム カタログに直接クエリを実行しても問題なく、psql -Eその方法のガイドとして役立ちます。

于 2012-09-17T08:13:02.027 に答える
94

データベースに接続し、テーブルを一覧表示します。

\c liferay
\dt

それはとにかく私がそれをする方法です。

必要に応じて、これら2つのコマンドを1行にまとめることができます。

\c liferay \dt
于 2012-09-16T09:03:55.420 に答える
3

SQL クエリでは、次のコードを記述できます。

select table_name from information_schema.tables where table_schema='YOUR_TABLE_SCHEME';

テーブル スキームを YOUR_TABLE_SCHEME に置き換えます。

例:

select table_name from information_schema.tables where table_schema='eLearningProject';

すべてのスキームとすべてのテーブルを表示するには、where 句は必要ありません。

select table_name from information_schema.tables
于 2016-08-26T13:43:56.010 に答える
2

1 行の例は次のとおりです。

\dt schemaname.* 

あなたのシナリオでは:

\dt public.*

スキーマのリストを取得するには:

\dn

public何も指定されていない場合のデフォルトのスキーマであることに注意してください。ドキュメントの引用:

前のセクションでは、スキーマ名を指定せずにテーブルを作成しました。デフォルトでは、そのようなテーブル (およびその他のオブジェクト) は、「public」という名前のスキーマに自動的に配置されます。すべての新しいデータベースには、そのようなスキーマが含まれています。

を使用\dt *.*すると、 などの内部テーブルを含む、すべてのスキーマ内のすべてのテーブルの長いリストが出力されpg_catalogます。上記はフィルタリングに役立ちます。

于 2019-12-09T13:26:58.497 に答える
1

すべてのスキーマのすべてのテーブルが必要ない場合は、自動化スクリプトでこれを使用できます。

  for table in $(psql -qAntc '\dt' | cut -d\| -f2); do
      ...
  done
于 2017-09-20T11:42:25.247 に答える