118 votes

PostgreSQL : noms de contraintes par défaut

Lors de la création d'une table dans PostgreSQL, des noms de contraintes par défaut seront attribués s'ils ne sont pas fournis :

CREATE TABLE example (
    a integer,
    b integer,
    UNIQUE (a, b)
);

Mais l'utilisation de ALTER TABLE pour ajouter une contrainte, il semble qu'un nom soit obligatoire :

ALTER TABLE example ADD CONSTRAINT my_explicit_constraint_name UNIQUE (a, b);

Cela a provoqué quelques incohérences dans la dénomination des projets sur lesquels j'ai travaillé, et suscite les questions suivantes :

  1. Existe-t-il un moyen simple d'ajouter une contrainte à une table existante avec le nom qu'elle aurait reçu si elle avait été ajoutée lors de la création de la table ?

  2. Si ce n'est pas le cas, les noms par défaut devraient-ils être évités afin d'éviter les incohérences ?

362voto

Frank Heikens Points 29270

Les noms standards des index dans PostgreSQL sont les suivants :

{tablename}_{columnname(s)}_{suffix}

où le suffixe est l'un des suivants :

  • pkey pour une contrainte de clé primaire
  • key pour une contrainte unique
  • excl pour une contrainte d'exclusion
  • idx pour tout autre type d'index
  • fkey pour une clé étrangère
  • check pour une contrainte de contrôle

Le suffixe standard pour les séquences est

  • seq pour toutes les séquences

Preuve de votre contrainte UNIQUE :

AVIS : CREATE TABLE / UNIQUE créera créer un index implicite "exemple_a_b_key" pour la table "exemple"

44voto

a_horse_with_no_name Points 100769

En manuel est assez clair à ce sujet (" contrainte de table : Ce formulaire ajoute une nouvelle contrainte à une table en utilisant la même syntaxe que CREATE TABLE. ")

Vous pouvez donc simplement courir :

ALTER TABLE example ADD UNIQUE (a, b);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X