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


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

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

6 110

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-запросе можно написать такой код:

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.