Como listar todos os esquemas no PostgreSQL?


239

Ao usar o PostgreSQL v9.1, como listar todos os esquemas usando o SQL?

Eu estava esperando algo do tipo:

SELECT something FROM pg_blah;

Respostas:


259

Para listar todos os esquemas, use o padrão (ANSI) INFORMATION_SCHEMA

select schema_name
from information_schema.schemata;

Mais detalhes no manual

alternativamente:

select nspname
from pg_catalog.pg_namespace;

Mais detalhes sobre pg_catalog no manual


250

Ao usar a psqllinha de comando, você pode listar todos esquema com comando \dn.


Obrigado. Seria bom ter apenas os esquemas retornados por \ dn, mas, neste caso, estou escrevendo um aplicativo de inicialização que se conecta usando libpq / libpqxx, para não ter acesso à CLI.
31513 Stéphane

1
o que são esquemas, \dnlistas, em oposição a tabelas que \dtlistam?
Tommy

8
@ Tommy \dtlista tabelas para esquema público. Para mostrar tabelas de todos os esquemas, use \dt *.*e para um esquema específico \dt schema_name.*.
Sério

@ Tommy, esquemas são namespaces: você pode ter tabelas diferentes com o mesmo nome em namespaces diferentes.
eppesuig

38

Conecte-se ao comando psql -> psql --u {userName} {DBName} e digite o comando abaixo para verificar quantos esquemas estão presentes no banco de dados

DBName=# \dn

Caso contrário, você pode verificar a sintaxe seguindo as etapas abaixo facilmente:

  1. Após conectar o DB, pressione

    DBName=# help

Você obterá as opções abaixo:

Você está usando o psql, a interface da linha de comandos para o PostgreSQL.
Digite: \ copyright para termos de distribuição
\ h para obter ajuda com comandos SQL
\? para obter ajuda com os comandos psql
\ g ou finalizar com ponto e vírgula para executar a consulta
\ q para sair

Então aperte

DBName=# \?

Você receberá todas as opções com muita facilidade.


9

Começando No postgres 9.3, um truque que você pode usar no postgres para obter o sql exato do comando informativo (como \ d, \ du, \ dp, etc) no psql é usando uma transação. Aqui está como o truque vai. Abra uma sessão do postgres e digite seu comando:

begin;
\dn+

Enquanto a transação ainda estiver em execução, abra outra sessão do postgres e consulte pg_stat_activity para obter o sql exato.

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
Você não precisa enganá-lo; apenas corra #\set ECHO_HIDDEN on
1111 Nick Barnes

8
ou execute-o comopsql -E
Evan Carroll
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.