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;
When using the psql
command line, you may list all schema with command \dn
.
\dn
lists, as opposed to tables that \dt
lists?
\dt
lists tables for public schema. To show tables of all schemas use \dt *.*
and for a particular schema use \dt schema_name.*
.
\dt+
(optionally with a name of one schema or a glob matching multiple schemas; you can list multiple schemas separated using |
, e.g. one|two|three
) which also returns Acess privileges
and Description
besides Name
and Owner
.
Commented
Sep 11 at 13:16
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:
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
Then type
DBName=# \?
You will get all the options very easily.
psql --u login
is wrong CLI attribute, you should use psql --username=login
or psql -U login
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;
\set ECHO_HIDDEN on
Commented
Sep 11, 2016 at 1:22
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;