Comment lister toutes les contraintes d'une table dans PostgreSQL?

Réponses:

33

Les contraintes peuvent être récupérées via 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>';

Remplacez <schema name>par le nom de votre schéma et <table name>par le nom de votre table.

peu collant
la source
1
Notez que pg_catalog.pg_constraintcela ne contient pas de NOT NULLcontraintes.
Luís de Sousa
6

Dans la psqlligne de commande, ces informations se trouvent dans la feuille de tableau, obtenue avec la \d+commande. d+informe également sur les NOT NULLcontraintes, quelque chose qui n'est pas présent dans le pg_catalog.pg_constrainttableau. Un exemple:

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

La mise en garde ici est que vous n'obtenez pas les noms de toutes les contraintes de cette façon.

Luís de Sousa
la source
Je vois des noms de contraintes dans votre sortie publiée.
ypercubeᵀᴹ