Bagaimana cara mendaftar semua kendala dari sebuah tabel di PostgreSQL?


Jawaban:


33

Batasan dapat diambil melalui 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>';

Ganti <schema name>dengan nama skema Anda dan <table name>dengan nama tabel Anda.


1
Perhatikan bahwa pg_catalog.pg_constrainttidak mengandung NOT NULLkendala.
Luís de Sousa

6

Di psqlbaris perintah, informasi ini ada di lembar tabel, diperoleh dengan \d+perintah. d+juga menginformasikan tentang NOT NULLkendala, sesuatu yang tidak ada dalam pg_catalog.pg_constrainttabel. Sebuah contoh:

# \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)

Peringatan di sini adalah bahwa Anda tidak mendapatkan nama-nama dari semua kendala dengan cara ini.


Saya melihat nama kendala dalam output yang Anda posting.
ypercubeᵀᴹ
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.