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


148

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

я что-то вдоль линий ожидали:

SELECT something FROM pg_blah; 
156

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

select schema_name 
from information_schema.schemata 

Подробнее в руководстве: http://www.postgresql.org/docs/current/static/information-schema.html

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

select nspname 
from pg_catalog.pg_namespace; 

Подробнее о pg_catalog в руководстве: http://www.postgresql.org/docs/current/static/catalogs.html


165

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

  0

Спасибо. Было бы неплохо иметь только схемы, возвращаемые \ dn, но в этом случае я пишу загрузочное приложение, которое подключается с помощью libpq/libpqxx, поэтому у меня нет доступа к CLI. 15 апр. 132013-04-15 20:03:56

+1

Какие * * схемы, которые '\ dn' списки, в отличие от таблиц, которые' \ dt' списки? 29 апр. 162016-04-29 15:29:19

  0

@Tommy '\ dt' перечисляет таблицы для общедоступной схемы. Для отображения таблиц всех схем используйте '\ dt *. *' И для конкретной схемы используйте '\ dt schema_name. *'. 22 ноя. 172017-11-22 06:34:33

  0

@Tommy, схемы - это пространства имен: у вас могут быть разные таблицы с одинаковым именем в разных пространствах имен. 30 ноя. 172017-11-30 08:48:11


25

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

DBName=# \dn 

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

  1. После подключения к БД, пресс-

    DBName=# help 
    

вы получите следующие возможности:

Вы используете Psql, интерфейс командной строки для PostgreSQL.
Тип: \ copyright для условий распространения
\ h для справки по командам SQL
\? за помощью PSQL команды
\ г или заканчиваться точкой с запятой, чтобы выполнить запрос
\ д бросить

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

DBName=# \? 

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


2

Начиная с 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; 
+6

Вам не нужно обманывать его; просто запустите '\ set ECHO_HIDDEN on' 11 сен. 162016-09-11 01:22:31

+4

или запустите его как' psql -E' 22 дек. 162016-12-22 17:46:28