Як перерахувати всі схеми в PostgreSQL?


239

Як використовувати PostgreSQL v9.1, як я перерахувати всі схеми за допомогою SQL?

Я чекав чогось у напрямку:

SELECT something FROM pg_blah;

Відповіді:


259

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

select schema_name
from information_schema.schemata;

Детальніше в посібнику

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

select nspname
from pg_catalog.pg_namespace;

Детальніше про pg_catalog в посібнику


250

Під час використання psqlкомандного рядка ви можете перелічити всі схеми з командою \dn.


Дякую. Було б добре, щоб просто схеми повернулися \ 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.
Тип: \ авторське право на умови розповсюдження
\ h для довідки з командами SQL
\? за допомогою команд psql
\ g або закінчуйте крапкою з комою, щоб виконати запит
\ q для виходу

Потім натисніть

DBName=# \?

Ви отримаєте всі варіанти дуже легко.


9

Починаючи з postgres 9.3, один трюк, який ви можете використовувати в postgres, щоб отримати точний sql інформаційної команди (наприклад, \ d, \ du, \ dp тощо) у psql, це шляхом транзакції. Ось як виходить хитрість. Відкрийте один сеанс післяскреси та введіть свою команду:

begin;
\dn+

Поки транзакція все ще виконується, відкрийте ще один сеанс постгресів і запитайте 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
Еван Керролл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.