Psql список всех таблиц

Я хотел бы перечислить все таблицы в liferay база данных в моей установке PostgreSQL. Как мне это сделать?

Я хотел бы выполнить SELECT * FROM applications; на

6 ответов


если вы хотите получить список все таблицы, вы должны использовать:

\dt *.*

, чтобы указать, что вы хотите, чтобы все таблицы во всех схемах. Это будет включать таблицы в pg_catalog, системные таблицы и те, что в information_schema. Нет встроенного способа сказать "все таблицы во всех пользовательских схемах"; однако вы можете установить свой search_path в список всех схем, представляющих интерес перед запуском \dt.

вы можете сделать это программно, в котором дело psql обратная косая черта-команды не будут выполнять эту работу. Вот где the INFORMATION_SCHEMA приходит на помощь. Список таблиц:

SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';

кстати, если вы когда-нибудь захотите увидеть, что psql делает в ответ на команду обратной косой черты, run 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-стандарта portable INFORMATION_SCHEMA вместо системных каталогов Pg, где это возможно, но иногда вам нужна Pg-конкретная информация. В этих случаях можно запросить система каталогов напрямую, и psql -E может быть полезным руководством для того, как это сделать.


подключитесь к базе данных, затем перечислите таблицы:

\c liferay
\dt

вот как я это делаю.

вы можете объединить эти две команды в одну строку, если хотите:

\c liferay \dt

чтобы увидеть общедоступные таблицы, вы можете сделать

список таблиц

\dt

таблица списка, просмотр и права доступа

\dp or \z

или просто имена таблиц

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

В SQL Query вы можете написать этот код:

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

Это можно использовать в скриптах автоматизации, если вам не нужны все таблицы во всех схемах:

  for table in $(psql -qAntc '\dt' | cut -d\| -f2); do
      ...
  done

вы можете \? чтобы получить информацию обо всех командах, поддерживаемых в psql.