Làm thế nào để liệt kê tất cả các ràng buộc của một bảng trong PostgreSQL?


Câu trả lời:


33

Các ràng buộc có thể được lấy thông qua pg_catalog.pg_constraint.

SELECT con.*
       FROM pg_catalog.pg_constraint con
            INNER JOIN pg_catalog.pg_class rel
                       ON rel.oid = con.conrelid
            INNER JOIN pg_catalog.pg_namespace nsp
                       ON nsp.oid = connamespace
       WHERE nsp.nspname = '<schema name>'
             AND rel.relname = '<table name>';

Thay thế <schema name>bằng tên của lược đồ của bạn và <table name>bằng tên của bảng của bạn.


1
Lưu ý rằng pg_catalog.pg_constraintkhông chứa các NOT NULLràng buộc.
Luís de Sousa

6

Trong psqldòng lệnh, thông tin này nằm trong bảng, thu được bằng \d+lệnh. d+cũng thông báo về các NOT NULLràng buộc, một cái gì đó không có trong pg_catalog.pg_constraintbảng. Một ví dụ:

# \d+ observations.stream   
                                                  Table "observations.stream"
 Column |       Type        | Collation | Nullable | Default | Storage  | Stats target |                 Description                 
--------+-------------------+-----------+----------+---------+----------+--------------+---------------------------------------------
 id     | integer           |           | not null |         | plain    |              | 
 name   | character varying |           | not null |         | extended |              | This should be a table in the import schema
 min_id | integer           |           | not null |         | plain    |              | 
 about  | character varying |           | not null |         | extended |              | 
Indexes:
    "stream_pkey" PRIMARY KEY, btree (id)
    "stream_name_key" UNIQUE CONSTRAINT, btree (name)
Check constraints:
    "stream_id_check" CHECK (id > 0)
Referenced by:
    TABLE "profile" CONSTRAINT "profile_id_stream_fkey" FOREIGN KEY (id_stream) REFERENCES stream(id)

Thông báo trước ở đây là bạn không nhận được tên của tất cả các ràng buộc theo cách này.


Tôi thấy tên ràng buộc trong đầu ra được đăng của bạn.
ypercubeᵀᴹ
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.