Psql список всех таблиц
Я хотел бы перечислить все таблицы в liferay
база данных в моей установке PostgreSQL. Как мне это сделать?
Я хотел бы выполнить SELECT * FROM applications;
на
6 ответов:
если вы хотите получить список все таблицы, вы должны использовать:
\dt *.*
, чтобы указать, что вы хотите, чтобы все таблицы во всех схемах. Это будет включать таблицы в
pg_catalog
, системные таблицы, и те, вinformation_schema
. Нет встроенного способа сказать "все таблицы во всех пользовательских схемах"; однако вы можете установить свойsearch_path
к списку всех интересующих схем перед запуском\dt
.вы можете сделать это программно, в котором дело
psql
обратная косая черта-команды не будут выполнять эту работу. Вот где theINFORMATION_SCHEMA
приходит на помощь. Список таблиц:SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
кстати, если вы когда-нибудь хотите увидеть, что
psql
делает в ответ на команду обратной косой черты, runpsql
С-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