Як перелічити всі обмеження таблиці в PostgreSQL?


30

Як перелічити всі обмеження (Первинний ключ, чек, унікальний взаємний ексклюзив, ..) таблиці в PostgreSQL?



6
\d+ tablenameу psql
Ясен

Відповіді:


33

Обмеження можна отримати за допомогою 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>';

Замініть <schema name>назви вашої схеми та <table name>назви вашої таблиці.


1
Зверніть увагу, що pg_catalog.pg_constraintне містить NOT NULLобмежень.
Луїс де Суса

6

У psqlкомандному рядку ця інформація знаходиться в аркуші таблиці, отриманому за допомогою \d+команди. d+також повідомляє про NOT NULLобмеження, чого немає в pg_catalog.pg_constraintтаблиці. Приклад:

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

Застереження тут полягає в тому, що ви не отримуєте назви всіх обмежень таким чином.


Я бачу імена обмежень у вашому опублікованому виході.
ypercubeᵀᴹ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.