2013-06-28 40 views
5

DB của tôi có nhiều bảng (Nói 400+) và tôi chỉ nhớ một phần tên của người tôi đang tìm kiếm.tra cứu tên bảng trong PSQL

Tôi biết \d sẽ hiển thị tất cả các bảng, nhưng đó là quá nhiều để xem xét. Có một số lệnh để liệt kê tất cả các bảng có tên khớp với regex đã cho không?

Cảm ơn

Trả lời

0

Có một bảng gọi là pg_tables trong đó có tất cả các tên bảng trong đó.

2

Không thuận tiện lắm trừ khi bạn làm cho nó là một proc, nhưng;

SELECT * FROM pg_tables WHERE SUBSTRING(tablename FROM '<regex>') <> ''; 

Để thuận tiện hơn, bạn có thể tạo và gọi cho proc;

CREATE FUNCTION ft(TEXT) RETURNS SETOF pg_tables AS 
    'SELECT * FROM pg_tables WHERE SUBSTRING(tablename from $1) <> '''';' 
LANGUAGE SQL; 

SELECT * FROM ft('.*oc.*')  -- Gets all tables matching `.*oc.*` 

An SQLfiddle to test both with.

+0

Hãy nhớ thêm 'tablename' nếu bạn chỉ cần tablenames 'CHỌN tablename TỪ pg_tables ĐÂU SUBSTRING (tablename TỪ '') <> ''; ' – zerocog

8

Nó được xây dựng trong để psql, bạn có thể sử dụng ký tự đại diện trong \d, \dt, vv, ví dụ:

craig=> \dt test* 
     List of relations 
Schema | Name | Type | Owner 
--------+-----------+-------+------- 
public | test  | table | craig 
public | testtable | table | craig 
public | testu  | table | craig 
public | testx  | table | craig 
(4 rows) 

Bạn sẽ muốn sử dụng \dt từ \d sẽ hiển thị chi tiết cho mỗi bảng, không chỉ liệt kê bảng.

Bạn có thể làm điều này với schemas quá, ví dụ:

\dt *.sometable 

sẽ liệt kê tất cả các bảng tên sometable trong bất kỳ sơ đồ.

Thuận tiện hơn nhiều so với việc viết truy vấn chống lại pg_class đã tham gia pg_namespace hoặc truy vấn information_schema.

Cú pháp toàn cầu thông thường được chấp nhận, trong đó ? là bất kỳ ký tự đơn nào và * bằng 0 hoặc nhiều ký tự. Vì vậy, \dt ???? sẽ liệt kê tất cả các bảng có tên gồm bốn ký tự.

Nhiều ký tự đại diện được phép, ví dụ:

craig=> \dt public.*e?t* 
      List of relations 
Schema |  Name  | Type | Owner 
--------+--------------+-------+------- 
public | exclude_test | table | craig 
public | prep_test | table | craig 
public | test   | table | craig 
public | testtable | table | craig 
public | testu  | table | craig 
public | testx  | table | craig 
(6 rows)