¿Cómo enumerar todas las restricciones de una tabla en PostgreSQL?

Respuestas:

33

Las restricciones se pueden recuperar a través de 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>';

Reemplace <schema name>con el nombre de su esquema y <table name>con el nombre de su tabla.

poco pegajoso
fuente
1
Tenga en cuenta que pg_catalog.pg_constraintno contiene NOT NULLrestricciones.
Luís de Sousa
6

En la psqllínea de comando esta información se encuentra en la hoja de tabla, obtenida con el \d+comando. d+También informa sobre las NOT NULLrestricciones, algo que no está presente en la pg_catalog.pg_constrainttabla. Un ejemplo:

# \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 advertencia aquí es que no obtienes los nombres de todas las restricciones de esta manera.

Luís de Sousa
fuente
Veo nombres de restricciones en su salida publicada.
ypercubeᵀᴹ