Comment supprimer une contrainte de vérification sans nom dans une table PostgresQL?

9

J'ai créé une table PostgresQL mais j'ai ajouté une contrainte de vérification sans nom sur l'une des colonnes:

CREATE TABLE FOO
(
id serial primary key,
price_range smallint CHECK (price_range > 0),
url varchar(255)
);

Maintenant, je veux supprimer cette contrainte, mais je ne sais pas comment. Le ALTER TABLE typique ... DROP CONSTRAINT ... en a besoin constraint_namemais je n'en ai pas.

Je sais qu'il y a une réponse ici mais quand j'ai essayé de déterminer le nom de ma contrainte de vérification en suivant la réponse ici:

SELECT *
FROM information_schema.constraint_table_usage
WHERE table_name = 'your_table'

Tout ce que j'ai récupéré était une seule contrainte dont l' constraint_nameentrée était foo pkeyqui fait référence à la contrainte de clé primaire et non à ma vérification dans la pricecolonne. Donc, cette réponse ne m'a pas aidé, sauf si je manque quelque chose.

Comment puis-je supprimer cette contrainte sans perdre de données?

Merci!

kilgoretrout
la source

Réponses:

10

La contrainte a un nom, que vous l'ayez spécifié ou non.

À partir de psql, \d foorépertoriera toutes les contraintes de table, ainsi que leurs noms attribués automatiquement.

Vous pouvez également les trouver en interrogeant directement les tables du catalogue:

SELECT conname
FROM pg_constraint
WHERE
  conrelid = 'foo'::regclass AND
  contype = 'c'

Le nom de la table peut être qualifié de schéma si nécessaire (par exemple 'public.foo'::regclass).

contype = 'c'le filtre jusqu'aux CHECKcontraintes; les contypevaleurs des autres types de contraintes sont documentées ici .

Nick Barnes
la source