Nếu bạn muốn liệt kê tất cả bảng, bạn phải sử dụng:
\dt *.*
để cho biết rằng bạn muốn tất cả các bảng trong tất cả các lược đồ . Điều này sẽ bao gồm các bảng trong pg_catalog
, các bảng hệ thống và những bảng đó trong information_schema
. Không có cách tích hợp nào để nói "tất cả các bảng trong tất cả các lược đồ do người dùng xác định"; tuy nhiên, bạn có thể đặt search_path
vào danh sách tất cả các lược đồ quan tâm trước khi chạy \dt
.
Bạn có thể muốn thực hiện việc này theo chương trình, trong trường hợp này là psql
các lệnh gạch chéo ngược sẽ không thực hiện công việc. Đây là nơi chứa INFORMATION_SCHEMA
đến để giải cứu. Để liệt kê các bảng:
SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
BTW, nếu bạn muốn xem psql
gì đang thực hiện phản hồi với một lệnh gạch chéo ngược, hãy chạy psql
với -E
lá cờ. ví dụ:
$ psql -E regress
regress=# \list
********* QUERY **********
SELECT d.datname as "Name",
pg_catalog.pg_get_userbyid(d.datdba) as "Owner",
pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding",
d.datcollate as "Collate",
d.datctype as "Ctype",
pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges"
FROM pg_catalog.pg_database d
ORDER BY 1;
**************************
để bạn có thể thấy rằng psql
đang tìm kiếm pg_catalog.pg_database
khi nó nhận được một danh sách các cơ sở dữ liệu. Tương tự, đối với các bảng trong một cơ sở dữ liệu nhất định:
SELECT n.nspname as "Schema",
c.relname as "Name",
CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' END as "Type",
pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','')
AND n.nspname <> 'pg_catalog'
AND n.nspname <> 'information_schema'
AND n.nspname !~ '^pg_toast'
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;
Tốt hơn là sử dụng INFORMATION_SCHEMA
tiêu chuẩn SQL, di động thay vì danh mục hệ thống Pg nếu có thể, nhưng đôi khi bạn cần thông tin cụ thể về Pg. Trong những trường hợp đó, bạn có thể truy vấn trực tiếp danh mục hệ thống và psql -E
có thể là một hướng dẫn hữu ích về cách làm như vậy.