PostgreSQL'deki tüm şemaları nasıl listeleyebilirim?


239

PostgreSQL v9.1 kullanırken, SQL kullanan tüm şemaları nasıl listeleyebilirim?

Satırları boyunca bir şey bekliyordum:

SELECT something FROM pg_blah;

Yanıtlar:


259

Tüm şemaları listelemek için, (ANSI) standardını INFORMATION_SCHEMA kullanın

select schema_name
from information_schema.schemata;

Kılavuzdaki daha fazla detay

alternatif olarak:

select nspname
from pg_catalog.pg_namespace;

İçinde pg_catalog hakkında daha fazla ayrıntı kılavuzuna


250

psqlKomut satırını kullanırken, tüm şemaları komut ile listeleyebilirsiniz \dn.


Teşekkürler. Yalnızca \ dn tarafından döndürülen şemalara sahip olmak güzel olurdu, ancak bu durumda libpq / libpqxx kullanarak bağlanan bir önyükleme uygulaması yazıyorum, bu yüzden CLI erişimim yok.
Stéphane

1
Ne olduğunu yani şemalar \dntablolar aksine, listeler \dtlisteler?
Tommy,

8
@ Tommy \dtgenel şema için tabloları listeler. Kullanılan tüm şemaların tablolarını göstermek \dt *.*ve belirli bir şema kullanımı için \dt schema_name.*.
Ciddi

@ Tommy, şemalar ad alanlarıdır: farklı ad alanlarında aynı ada sahip farklı tablolarınız olabilir.
eppesuig

38

Psql komutuna bağlanın -> psql --u {userName} {DBName}, ardından DB'de kaç tane şema bulunduğunu kontrol etmek için aşağıdaki komutu yazabilirsiniz.

DBName=# \dn

Aksi takdirde, aşağıdaki adımları kullanarak sözdizimini kolayca kontrol edebilirsiniz.

  1. DB'yi bağladıktan sonra

    DBName=# help

Aşağıdaki seçenekleri göreceksiniz:

PostgreSQL'in komut satırı arayüzü olan psql'yi kullanıyorsunuz.
Aşağıdakini yazın: \ dağıtım koşulları için \ telif hakkı
\ h SQL komutlarıyla ilgili yardım için
\? psql komutları ile ilgili yardım için
\ g veya sorguyu çalıştırmak için
\ q virgülle sonlandırın

Sonra basın

DBName=# \?

Tüm seçenekleri çok kolay bir şekilde alacaksınız.


9

Başlayanlar 9.3 postgresinde, postgres'te psql'de bilgi komutunun (\ d, \ du, \ dp, vb. Gibi) tam sql değerini almak için kullanabileceğiniz bir numara bir işlem kullanmaktır. İşin püf noktası işte böyle. Bir postgres oturumu açın, sonra komutunuzu yazın:

begin;
\dn+

İşlem devam ederken, başka bir postgres oturumu açın ve pg_stat_activity'yi sorgulayın ve tam sql'yi elde edin.

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
Kandırmana gerek yok; sadece koşmak\set ECHO_HIDDEN on
Nick Barnes

8
ya da çalıştırmakpsql -E
Evan Carroll
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.