Lors de la création d'une table dans PostgreSQL, les 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 en utilisant 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é des incohérences de dénomination sur les projets sur lesquels j'ai travaillé et pose les questions suivantes:
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?
Sinon, faut-il éviter les noms par défaut pour éviter les incohérences?
manual est assez clair à ce sujet (" tableconstraint: ce formulaire ajoute une nouvelle contrainte à une table en utilisant la même syntaxe que CREATE TABLE. ")
Vous pouvez donc simplement exécuter:
Exemple ALTER TABLE ADD UNIQUE (a, b);
Les noms standard des index dans PostgreSQL sont:
{tablename}_{columnname(s)}_{suffix}
où le suffixe est l'un des suivants:
pkey
pour une contrainte de clé primairekey
pour une contrainte Uniqueexcl
pour une contrainte d'exclusionidx
pour tout autre type d'indexfkey
pour une clé étrangèrecheck
pour une contrainte CheckLe suffixe standard pour les séquences est
seq
pour toutes les séquencesPreuve de votre contrainte UNIQUE:
AVIS: CREATE TABLE/UNIQUE créera un index implicite "example_a_b_key" pour la table "example"