449

When using PostgreSQL v9.1, how do I list all of the schemas using SQL?

I was expecting something along the lines of:

SELECT something FROM pg_blah;
Stéphane
  • 5,745
  • 5
  • 20
  • 13

5 Answers5

454

To lists all schemas, use the (ANSI) standard INFORMATION_SCHEMA

select schema_name
from information_schema.schemata;

More details in the manual

alternatively:

select nspname
from pg_catalog.pg_namespace;

More details about pg_catalog in the manual

450

When using the psql command line, you may list all schema with command \dn.

eppesuig
  • 5,122
  • 1
  • 16
  • 15
68

Connect to the psql with command psql --username={userName} {DBName} then you can type the below command to check how many schemas are present in the database:

DBName=# \dn

Else you can check the syntax by the below steps easily:

  1. After connecting the the DB, type

     DBName=# help
    

    You will get the below options:

    You are using psql, the command-line interface to PostgreSQL.
    Type: \copyright for distribution terms
    \h for help with SQL commands
    ? for help with psql commands
    \g or terminate with semicolon to execute query
    \q to quit

  2. Then type

     DBName=# \?
    

    You will get all the options very easily.

AntonioK
  • 133
  • 5
Bhabatosh Bera
  • 681
  • 5
  • 2
34

Beginning On postgres 9.3, One trick you can use in postgres to get the exact sql of informational command (such as \d, \du, \dp, etc) in psql is by using a transaction. Here's how the trick goes. Open one postgres session, then type your command :

begin;
\dn+

While the transaction still running, open another postgres session, and query the pg_stat_activity and you can get the exact 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;
Soni Harriz
  • 1,160
  • 9
  • 6
2

These list all schemas including system's in the current database:

\dnS
\dn *

These list all schemas including system's in the current database in detail:

\dnS+
\dn+ *

This lists all schemas excluding system's in the current database:

\dn

This lists all schemas excluding system's in the current database in detail:

\dn+

These also list all schemas including system's in the current database:

SELECT * FROM pg_namespace;
SELECT * FROM information_schema.schemata;