web-dev-qa-db-fra.com

Comment répertorier les contraintes d'un domaine?

Considérez le scénario suivant:

CREATE DOMAIN dom_zipcode AS text;
ALTER DOMAIN dom_zipcode
  ADD CONSTRAINT zipchk CHECK (char_length(VALUE) = 5);

Maintenant, si je veux laisser tomber cette contrainte avec ALTER DOMAIN , le manuel dit :

ALTER DOMAIN name
    DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ]

Mais comment pouvons-nous trouver constraint_name? \dD montre que la définition de la contrainte (CHECK déclaration).

\dD dom_zipcode ;
                             List of domains
 Schema |    Name     | Type | Modifier |             Check
--------+-------------+------+----------+--------------------------------
 public | dom_zipcode | text |          | CHECK (char_length(VALUE) = 5)
(1 row)

Je peux jeter le schéma en utilisant pg_dump, mais je crois qu'il doit exister un moyen plus élégant d'établir cela en utilisant le terminal psql.

2
Adam Matan

Catalogue Système de PostgreSQL

SELECT conname
FROM pg_constraint
WHERE contypid = 'dom_zipcode'::regtype;
2
Mladen Uzelac

SQL Spec's INFORMATION_SCHEMA.DOMAIN_CONSTRAINTS

Vous pouvez également interroger cela dans domain_constraints table du information_schema

SELECT FORMAT('%I.%I.%I', constraint_schema, constraint_catalog, constraint_name)
FROM information_schema.domain_constraints
WHERE (domain_catalog,domain_schema,domain_name) = ('test','public','dom_zipcode');
0
Evan Carroll