Подтвердить что ты не робот

Psql перечислить все таблицы

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

Я хотел бы выполнить SELECT * FROM applications; в базе данных liferay. applications - таблица в моей жизни 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=# 
4b9b3361

Ответ 1

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

\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 может быть полезным руководством для этого.

Ответ 2

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

\c liferay
\dt

То, что я делаю это в любом случае.

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

\c liferay \dt

Ответ 3

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

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

\dt

список таблиц, представлений и прав доступа

\dp or \z

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

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

Ответ 4

В 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 where:

select table_name from information_schema.tables

Ответ 5

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

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

Ответ 6

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