Wie liste ich alle Einschränkungen einer Tabelle in PostgreSQL auf?

29

Wie liste ich in PostgreSQL alle Einschränkungen (Primärschlüssel, Prüfung, eindeutige gegenseitige Ausschließlichkeit, ..) einer Tabelle auf?

Thirumal
quelle
1
Die Abfrage im Link ist sinnvoll?
Arulkumar
6
\d+ tablenamein psql
Jasen
Fast
Erwin Brandstetter

Antworten:

31

Einschränkungen können über abgerufen werden 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>';

Ersetzen Sie <schema name>durch den Namen Ihres Schemas und <table name>durch den Namen Ihrer Tabelle.

klebriges Stück
quelle
1
Beachten Sie, dass pg_catalog.pg_constraintkeine NOT NULLEinschränkungen enthalten sind.
Luís de Sousa,
6

In der psqlBefehlszeile befinden sich diese Informationen im Tabellenblatt, das mit dem \d+Befehl abgerufen wurde . d+informiert auch über die NOT NULLEinschränkungen, die in der pg_catalog.pg_constraintTabelle nicht vorhanden sind . Ein Beispiel:

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

Die Einschränkung hierbei ist, dass Sie auf diese Weise nicht die Namen aller Einschränkungen erhalten.

Luís de Sousa
quelle
Ich sehe Einschränkungsnamen in Ihrer veröffentlichten Ausgabe.
Ypercubeᵀᴹ