Bagaimana cara mendaftar semua skema di PostgreSQL?

239

Saat menggunakan PostgreSQL v9.1, bagaimana cara membuat daftar semua skema menggunakan SQL?

Saya mengharapkan sesuatu seperti:

SELECT something FROM pg_blah;
Stéphane
sumber

Jawaban:

259

Untuk mencantumkan semua skema, gunakan INFORMASI_SCHEMA (ANSI) standar

select schema_name
from information_schema.schemata;

Lebih detail dalam manual

kalau tidak:

select nspname
from pg_catalog.pg_namespace;

Lebih detail tentang pg_catalog dalam manual

seekor kuda tanpa nama
sumber
250

Saat menggunakan psqlbaris perintah, Anda dapat mendaftar semua skema dengan perintah \dn.

eppesuig
sumber
Terima kasih. Akan menyenangkan jika skema dikembalikan oleh \ dn, tetapi dalam hal ini saya sedang menulis aplikasi bootstrap yang menghubungkan menggunakan libpq / libpqxx, jadi saya tidak memiliki akses CLI.
Stéphane
1
apa yang skema, yang \dndaftar, sebagai lawan tabel yang \dtberisi penawaran?
Tommy
8
@Tommy \dtmencantumkan tabel untuk skema publik. Untuk menampilkan tabel semua skema gunakan \dt *.*dan untuk penggunaan skema tertentu \dt schema_name.*.
Serius
@Tommy, skema adalah ruang nama: Anda mungkin memiliki tabel berbeda dengan nama yang sama di ruang nama yang berbeda.
eppesuig
38

Hubungkan ke perintah psql -> psql --u {userName} {DBName} maka Anda dapat mengetikkan perintah di bawah ini untuk memeriksa berapa banyak skema yang ada dalam DB

DBName=# \dn

Jika tidak, Anda dapat memeriksa sintaks dengan langkah-langkah di bawah ini dengan mudah-

  1. Setelah menghubungkan DB, tekan

    DBName=# help

Anda akan mendapatkan opsi di bawah ini:

Anda menggunakan psql, antarmuka baris perintah ke PostgreSQL.
Ketik: \ hak cipta untuk istilah distribusi
\ h untuk bantuan dengan perintah SQL
\? untuk bantuan dengan perintah psql
\ g atau mengakhiri dengan titik koma untuk mengeksekusi permintaan
\ q untuk keluar

Lalu tekan

DBName=# \?

Anda akan mendapatkan semua opsi dengan sangat mudah.

Bhabatosh Bera
sumber
9

Dimulai pada postgres 9.3, Salah satu trik yang dapat Anda gunakan dalam postgres untuk mendapatkan sql yang tepat dari perintah informasi (seperti \ d, \ du, \ dp, dll) di psql adalah dengan menggunakan transaksi. Begini caranya. Buka satu sesi postgres, lalu ketikkan perintah Anda:

begin;
\dn+

Saat transaksi masih berjalan, buka sesi postgres lain, dan kueri pg_stat_activity dan Anda bisa mendapatkan sql yang tepat.

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
sumber
12
Anda tidak perlu memperdayainya; jalankan\set ECHO_HIDDEN on
Nick Barnes
8
atau jalankan sebagaipsql -E
Evan Carroll