it-swarm.asia

Bagaimana daftar semua kendala dari sebuah tabel di PostgreSQL

Bagaimana cara membuat daftar semua kendala (kunci primer, periksa, saling eksklusif unik, ..) dari sebuah tabel di PostgreSQL?

39
Thirumal

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 meja Anda.

42
sticky bit

Di baris perintah psql informasi ini ada di lembar tabel, diperoleh dengan \d+ perintah. d+ juga menginformasikan tentang NOT NULL kendala, sesuatu yang tidak ada dalam pg_catalog.pg_constraint meja. 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.

10
Luís de Sousa