Liệt kê các bảng trong lược đồ PostgreSQL


329

Khi tôi thực hiện \dttrong psql tôi chỉ nhận được một danh sách các bảng trong lược đồ hiện tại ( publictheo mặc định).

Làm cách nào tôi có thể nhận được danh sách tất cả các bảng trong tất cả các lược đồ hoặc một lược đồ cụ thể?

Câu trả lời:


505

Trong tất cả các lược đồ:

=> \dt *.*

Trong một lược đồ cụ thể:

=> \dt public.*

Có thể sử dụng biểu thức chính quy với một số hạn chế

\dt (public|s).(s|t)
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 public | s    | table | cpn
 public | t    | table | cpn
 s      | t    | table | cpn

Người dùng nâng cao có thể sử dụng các ký hiệu biểu thức chính quy, chẳng hạn như các lớp ký tự, ví dụ [0-9] để khớp với bất kỳ chữ số nào. Tất cả các ký tự đặc biệt của biểu thức chính quy hoạt động như được chỉ định trong Mục 9.7.3, ngoại trừ .được lấy làm dấu phân cách như đã đề cập ở trên, *được dịch sang ký hiệu biểu thức chính quy .*, ?được dịch sang .$được khớp theo nghĩa đen. Bạn có thể mô phỏng các ký tự mẫu này theo nhu cầu bằng cách viết ?cho ., (R+|)cho R*hoặc (R|)cho R?. $không cần thiết như một ký tự biểu thức chính quy vì mẫu phải khớp với toàn bộ tên, không giống như cách giải thích thông thường của các biểu thức thông thường (nói cách khác,$được tự động gắn vào mẫu của bạn). Viết *ở đầu và / hoặc kết thúc nếu bạn không muốn mô hình được neo. Lưu ý rằng trong dấu ngoặc kép, tất cả các ký tự đặc biệt biểu thức chính quy đều mất ý nghĩa đặc biệt và được khớp theo nghĩa đen. Ngoài ra, các ký tự đặc biệt biểu thức chính quy được khớp theo nghĩa đen trong các mẫu tên toán tử (nghĩa là đối số của \do).


6
Đơn giản \dtlà tương đương với \dt public.*, phải không?
Ngọn lửa băng giá

Làm thế nào về, nói, hai bảng cụ thể trong một lược đồ cụ thể? Giống như \dt public.user_info, public.user_scope?
James M. Lay

Không bao giờ, nó dễ dàng hơn chỉ để làm \dt public.a; \dt public.b;trên một dòng.
James M. Lay

đó là loại ẩn ý .. Nếu \ dt chỉ cung cấp các bảng "công khai", người ta sẽ không mong đợi gì hơn thông qua các biểu thức thông thường ..
mehmet

1
@F FrozenFlame Không phải vậy! Theo mặc định nó hiển thị bất cứ thứ gì trong bạn search_path, và rằng mặc định "$user", public.*. Do đó, set search_path=s; \dtsẽ liệt kê tất cả các bảng trong lược đồ s.
Lukas Juhrich

257

Bạn có thể chọn các bảng từ information_schema

SELECT * FROM information_schema.tables 
WHERE table_schema = 'public'

6
rất hữu ích nếu giao diện của bạn không hỗ trợ các phím tắt. cảm ơn.
Matt Bannert

1
Đây cũng là tốt đẹp bởi vì bạn có thể làm một cái gì đó giống như chọn table_schema, tên_bảng từ information_schema.tables nơi tên_bảng như '% bất cứ điều gì%'; . nếu bạn cần phải biết sơ đồ bàn tọa lạc tại Không chắc bạn có thể làm điều đó với \ dt
Josh Brown

2
Cảm ơn bạn, nó hoạt động trên Amazon chuyển đỏ và \ dt (Câu trả lời được chấp nhận) thì không.
Carlos2W

2
Đây là câu trả lời chung hữu ích nhất. information_schema được định nghĩa trong tiêu chuẩn SQL, và có sẵn trên hầu hết các cơ sở dữ liệu theo đúng quy định
Davos

53

Ngoài ra, information_schemanó có thể được sử dụng pg_tables:

select * from pg_tables where schemaname='public';

3
Lưu ý rằng nếu bạn chỉ muốn tên bảng là truy vấn kết quả đó làSELECT tablename FROM pg_tables WHERE schemaname = 'public';
Grant Humphries

Tìm thấy một vấn đề quyền information_schemakhông liệt kê các mục từ publiclược đồ, nhưng pg_tablesphương thức này hoạt động tốt. Cảm ơn nhiều!
John Crawford

8

Đối với những người đi ngang qua đây trong tương lai:

Nếu bạn muốn xem danh sách các mối quan hệ cho một số lược đồ:

$psql mydatabase
mydatabase=# SET search_path TO public, usa;   #schema examples
SET
mydatabase=# \dt
              List of relations
 Schema |      Name       | Type  |  Owner
--------+-----------------+-------+----------
 public | counties        | table | postgres
 public | spatial_ref_sys | table | postgres
 public | states          | table | postgres
 public | us_cities       | table | postgres
 usa    | census2010      | table | postgres
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.