¿Cómo enumero todos los esquemas en PostgreSQL?


239

Cuando uso PostgreSQL v9.1, ¿cómo enumero todos los esquemas que usan SQL?

Esperaba algo en la línea de:

SELECT something FROM pg_blah;

Respuestas:


259

Para enumerar todos los esquemas, use el estándar (ANSI) INFORMATION_SCHEMA

select schema_name
from information_schema.schemata;

Más detalles en el manual

alternativamente:

select nspname
from pg_catalog.pg_namespace;

Más detalles sobre pg_catalog en el manual


250

Al usar la psqllínea de comando, puede enumerar todos los esquemas con comando \dn.


Gracias. Sería bueno tener solo los esquemas devueltos por \ dn, pero en este caso estoy escribiendo una aplicación de arranque que se conecta usando libpq / libpqxx, por lo que no tengo acceso a la CLI.
Stéphane

1
¿Qué son los esquemas, que \dnenumeran, en oposición a las tablas que \dtenumeran?
Tommy

8
@Tommy \dtenumera las tablas para el esquema público. Para mostrar tablas de todos los esquemas de uso \dt *.*y para un uso de esquema particular \dt schema_name.*.
Serio

@Tommy, los esquemas son espacios de nombres: puede tener diferentes tablas con el mismo nombre en diferentes espacios de nombres.
eppesuig

38

Conéctese al comando psql -> psql --u {userName} {DBName}, luego puede escribir el siguiente comando para verificar cuántos esquemas están presentes en la base de datos

DBName=# \dn

De lo contrario, puede verificar la sintaxis siguiendo los pasos a continuación fácilmente:

  1. Después de conectar el DB, presione

    DBName=# help

Obtendrá las siguientes opciones:

Está utilizando psql, la interfaz de línea de comandos para PostgreSQL.
Escriba: \ copyright para los términos de distribución
\ h para obtener ayuda con los comandos SQL
\? para obtener ayuda con los comandos psql
\ g o terminar con punto y coma para ejecutar la consulta
\ q para salir

Entonces presione

DBName=# \?

Obtendrá todas las opciones muy fácilmente.


9

Comenzando en postgres 9.3, un truco que puede usar en postgres para obtener el sql exacto del comando informativo (como \ d, \ du, \ dp, etc.) en psql es mediante el uso de una transacción. Así es como funciona el truco. Abra una sesión de postgres, luego escriba su comando:

begin;
\dn+

Mientras la transacción aún se está ejecutando, abra otra sesión de postgres y consulte pg_stat_activity para obtener el sql exacto.

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
No necesitas engañarlo; solo corre\set ECHO_HIDDEN on
Nick Barnes

8
o ejecutarlo comopsql -E
Evan Carroll
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.