Как мне перечислить все схемы в PostgreSQL?

239

Как использовать PostgreSQL v9.1, как мне перечислить все схемы, использующие SQL?

Я ожидал что-то вроде:

SELECT something FROM pg_blah;
Stéphane
источник

Ответы:

259

Чтобы получить список всех схем, используйте стандарт (ANSI) INFORMATION_SCHEMA

select schema_name
from information_schema.schemata;

Подробнее в руководстве

альтернативно:

select nspname
from pg_catalog.pg_namespace;

Подробнее о pg_catalog в руководстве

a_horse_with_no_name
источник
250

При использовании psqlкомандной строки вы можете перечислить всю схему с помощью команды \dn.

eppesuig
источник
Благодарю. Было бы неплохо, чтобы \ dn возвращал только схемы, но в этом случае я пишу приложение начальной загрузки, которое подключается с использованием libpq / libpqxx, поэтому у меня нет доступа к CLI.
Стефан
1
Что такое схемы, эти \dnсписки, в отличие от таблиц, которые \dtсписки?
Томми
8
@Tommy \dtперечисляет таблицы для общедоступной схемы. Чтобы показать таблицы всех схем использования \dt *.*и для конкретной схемы использования \dt schema_name.*.
Серьезное
@ Tommy, схемы - это пространства имен: у вас могут быть разные таблицы с одинаковыми именами в разных пространствах имен.
eppesuig
38

Подключитесь к команде psql -> psql --u {userName} {DBName}, затем введите следующую команду, чтобы проверить, сколько схем присутствует в БД

DBName=# \dn

В противном случае вы можете легко проверить синтаксис с помощью следующих шагов:

  1. После подключения БД нажмите

    DBName=# help

Вы получите следующие варианты:

Вы используете psql, интерфейс командной строки для PostgreSQL.
Введите: \ copyright для условий распространения
\ h для получения справки по командам SQL
\? для получения справки по командам psql
\ g или завершите их точкой с запятой для выполнения запроса
\ q для выхода

Затем нажмите

DBName=# \?

Вы получите все варианты очень легко.

Бхабатош Бера
источник
9

Начиная с postgres 9.3, один прием, который вы можете использовать в postgres для получения точного sql информационной команды (такой как \ d, \ du, \ dp и т. Д.) В psql, заключается в использовании транзакции. Вот как трюк идет. Откройте один сеанс postgres, затем введите команду:

begin;
\dn+

Пока транзакция все еще выполняется, откройте другой сеанс postgres и запросите pg_stat_activity, и вы сможете получить точный sql.

postgres=# select query from pg_stat_activity ;
                                 query                                 
-----------------------------------------------------------------------
 SELECT n.nspname AS "Name",                                          +
   pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner",                 +
   pg_catalog.array_to_string(n.nspacl, E'\n') AS "Access privileges",+
   pg_catalog.obj_description(n.oid, 'pg_namespace') AS "Description" +
 FROM pg_catalog.pg_namespace n                                       +
 WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'      +
 ORDER BY 1;
Сони Харрис
источник
12
Вам не нужно обманывать это; просто беги\set ECHO_HIDDEN on
Ник Барнс
8
или запустите это какpsql -E
Эван Кэрролл