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;

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


250

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


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.


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;

12
Anda tidak perlu memperdayainya; jalankan\set ECHO_HIDDEN on
Nick Barnes

8
atau jalankan sebagaipsql -E
Evan Carroll
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.