Làm cách nào để liệt kê tất cả các lược đồ trong PostgreSQL?


239

Khi sử dụng PostgreSQL v9.1, làm cách nào để liệt kê tất cả các lược đồ sử dụng SQL?

Tôi đã mong đợi một cái gì đó dọc theo dòng:

SELECT something FROM pg_blah;

Câu trả lời:


259

Để liệt kê tất cả các lược đồ, hãy sử dụng tiêu chuẩn (ANSI) THÔNG TIN_SCHema

select schema_name
from information_schema.schemata;

Thêm chi tiết trong hướng dẫn

cách khác:

select nspname
from pg_catalog.pg_namespace;

Thêm chi tiết về pg_catalog trong hướng dẫn


250

Khi sử dụng psqldòng lệnh, bạn có thể liệt kê tất cả các lược đồ bằng lệnh \dn.


Cảm ơn. Sẽ thật tuyệt khi chỉ có các lược đồ được trả về bởi \ dn, nhưng trong trường hợp này tôi đang viết một ứng dụng bootstrap kết nối bằng libpq / libpqxx, vì vậy tôi không có quyền truy cập CLI.
Stéphane

1
lược đồ gì , \dndanh sách đó , trái ngược với bảng \dtliệt kê?
Tommy

8
@Tommy \dtliệt kê các bảng cho lược đồ công cộng. Để hiển thị các bảng của tất cả các lược đồ sử dụng \dt *.*và cho một lược đồ cụ thể sử dụng \dt schema_name.*.
Nghiêm trọng

@ Mẹ ơi, lược đồ là không gian tên: bạn có thể có các bảng khác nhau có cùng tên trong các không gian tên khác nhau.
eppesuig

38

Kết nối với lệnh psql -> psql --u {userName} {DBName} sau đó bạn có thể nhập lệnh bên dưới để kiểm tra có bao nhiêu lược đồ có trong DB

DBName=# \dn

Khác, bạn có thể kiểm tra cú pháp bằng các bước dưới đây một cách dễ dàng-

  1. Sau khi kết nối DB, nhấn

    DBName=# help

Bạn sẽ nhận được các tùy chọn dưới đây:

Bạn đang sử dụng psql, giao diện dòng lệnh cho PostgreSQL.
Nhập: \ bản quyền cho các điều khoản phân phối
\ h để được trợ giúp với các lệnh SQL
\? để được trợ giúp với các lệnh psql
\ g hoặc chấm dứt bằng dấu chấm phẩy để thực hiện truy vấn
\ q để thoát

Sau đó nhấn

DBName=# \?

Bạn sẽ nhận được tất cả các tùy chọn rất dễ dàng.


9

Bắt đầu trên postgres 9.3, Một mẹo bạn có thể sử dụng trong postgres để có được sql chính xác của lệnh thông tin (chẳng hạn như \ d, \ du, \ dp, v.v.) trong psql là sử dụng giao dịch. Đây là cách lừa. Mở một phiên postgres, sau đó nhập lệnh của bạn:

begin;
\dn+

Trong khi giao dịch vẫn đang chạy, hãy mở một phiên postgres khác và truy vấn pg_stat_activity và bạn có thể nhận được sql chính xác.

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
Bạn không cần phải lừa nó; chỉ cần chạy\set ECHO_HIDDEN on
Nick Barnes

8
hoặc chạy nó dưới dạngpsql -E
Evan Carroll
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.