Liệt kê tất cả các bảng trong postgresql information_schema


200

Cách tốt nhất để liệt kê tất cả các bảng trong information_schema của PostgreSQL là gì?

Để làm rõ: Tôi đang làm việc với một DB trống (tôi chưa thêm bất kỳ bảng nào của riêng mình), nhưng tôi muốn xem mọi bảng trong cấu trúc information_schema.

Câu trả lời:


276

Bạn có thể chỉ cần chạy select * from information_schema.tablesđể có được danh sách mỗi bảng đang được Postgres quản lý cho một cơ sở dữ liệu cụ thể.

Bạn cũng có thể thêm một where table_schema = 'information_schema'để chỉ xem các bảng trong lược đồ thông tin.


4
Cảm ơn, tôi vừa thử: / dt (dấu hoa thị). (Dấu hoa thị) có khác gì không?
littleK

Tôi không biết gì về / dt (dấu hoa thị). (Dấu hoa thị), xin lỗi. Tôi chỉ chạy truy vấn chọn trong postgres và nó liệt kê thông tin về tất cả các bảng trong đó. Hãy thử chạy câu lệnh select (trên db trống của bạn) và xem nó trả về cái gì.
RodeoClown

Thử lệnh trên liệt kê các bảng sau trong information_schema: sql_features, sql_imâyation_info, sql_lacular, sql_packages, sql_parts, sql_sizing, sql_sizing_profiles ..... Vậy đâu là sự khác biệt giữa các bảng đó và thông tin?
littleK

2
Tất cả các bảng bạn đã liệt kê (thông qua lệnh / dt) cung cấp thông tin meta về cơ sở dữ liệu. Mỗi bảng được liệt kê cho thấy thông tin khác nhau. Vì vậy, ví dụ, bảng information_schema.tables liệt kê tất cả các bảng trong cơ sở dữ liệu và các thuộc tính của chúng (chẳng hạn như có thể xem đó là bảng hay dạng xem, tên đó là gì và thông tin khác như thế). Bảng information_schema.sql_features sẽ hiển thị các tính năng nào được bật trên cơ sở dữ liệu (vì vậy tôi có thể thấy rằng tôi đã nhúng C được hỗ trợ trên cơ sở dữ liệu của mình, cũng như SQL trực tiếp).
RodeoClown

1
Bạn có thể chạy một lựa chọn * trên mỗi bảng được liệt kê bởi lệnh dt - nó vừa hiển thị cho bạn một danh sách các bảng chứa dữ liệu meta trên cơ sở dữ liệu.
RodeoClown

112

Để liệt kê các bảng của bạn, hãy sử dụng:

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

Nó sẽ chỉ liệt kê các bảng mà bạn tạo ra.


Làm thế nào về các bảng mà bạn không tạo nhưng bạn có quyền truy cập?
huy

4
Điều này sẽ chỉ hiển thị các bảng trong lược đồ công cộng. Bạn có thể tạo các bảng trong các lược đồ khác.
Joe Van Dyk

Ngoài ra, điều này sẽ không phân biệt giữa các bảng và khung nhìn.
jayarjo

44
\dt information_schema.

từ trong psql, sẽ ổn thôi.


14

Các "\ z" COMMAND cũng là một cách tốt để bảng danh sách khi bên trong phiên psql tương tác.

ví dụ.

# psql -d mcdb -U admin -p 5555
mcdb=# /z
                           Access privileges for database "mcdb"
 Schema |              Name              |   Type   |           Access privileges
--------+--------------------------------+----------+---------------------------------------
 public | activities                     | table    |
 public | activities_id_seq              | sequence |
 public | activities_users_mapping       | table    |
[..]
 public | v_schedules_2                  | view     | {admin=arwdxt/admin,viewuser=r/admin}
 public | v_systems                      | view     |
 public | vapp_backups                   | table    |
 public | vm_client                      | table    |
 public | vm_datastore                   | table    |
 public | vmentity_hle_map               | table    |
(148 rows)

1
Điều này không liệt kê các bảng trong các lược đồ khác ngoài công khai .
Kenny Evitt

10

Bạn cũng có thể sử dụng

select * from pg_tables where schemaname = 'information_schema'

Trong các bảng pg * chung cho phép bạn xem mọi thứ trong db, không bị ràng buộc với các quyền của bạn (tất nhiên nếu bạn có quyền truy cập vào các bảng).


9

Đối với lược đồ riêng 'xxx'trong postgresql:

SELECT table_name FROM information_schema.tables 
 WHERE table_schema = 'xxx' AND table_type = 'BASE TABLE'

Không có table_type = 'BASE TABLE', bạn sẽ liệt kê các bảng và khung nhìn


8

1. quên tất cả các bảng và chế độ xem từ information_schema.tables, bao gồm các bảng của information_schema và pg_catalog.

select * from information_schema.tables

2.get bảng và khung nhìn thuộc về lược đồ nhất định

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog')

3. chỉ quên các bảng (gần như \ dt)

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog') and
    table_type = 'BASE TABLE'

Nếu bạn không lọc theo bảng_type, bạn sẽ nhận được tất cả các loại đối tượng, chẳng hạn như bảng và dạng xem được trộn lẫn.
russellhoff

Chính xác where table_schema not in ('information_schema', 'pg_catalog')thì để làm gì?
jayarjo

1

Nếu bạn muốn một truy vấn một lớp nhanh chóng và bẩn:

select * from information_schema.tables

Bạn có thể chạy nó trực tiếp trong công cụ Truy vấn mà không cần phải mở psql.

(Các bài đăng khác đề xuất các truy vấn information_schema cụ thể hơn nhưng với tư cách là một người mới, tôi tìm thấy truy vấn một lớp này giúp tôi nắm bắt được bảng)

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.