Beim Erstellen einer Tabelle in PostgreSQL werden Standardbeschränkungsnamen zugewiesen, wenn sie nicht angegeben werden:
CREATE TABLE example (
a integer,
b integer,
UNIQUE (a, b)
);
Aber mit ALTER TABLE
einer Einschränkung hinzuzufügen , er einen Namen scheint , ist zwingend notwendig:
ALTER TABLE example ADD CONSTRAINT my_explicit_constraint_name UNIQUE (a, b);
Dies hat bei Projekten, an denen ich gearbeitet habe, zu Namensinkonsistenzen geführt und die folgenden Fragen aufgeworfen:
Gibt es eine einfache Möglichkeit, einer vorhandenen Tabelle eine Einschränkung mit dem Namen hinzuzufügen, den sie erhalten hätte, wenn sie während der Tabellenerstellung hinzugefügt worden wäre?
Wenn nicht, sollten Standardnamen vollständig vermieden werden, um Inkonsistenzen zu vermeiden?
postgresql
naming-conventions
constraints
Ian Mackinnon
quelle
quelle
Antworten:
Das Handbuch ist ziemlich klar darüber (" tableconstraint: Dieses Formular fügt einer Tabelle eine neue Einschränkung hinzu, die dieselbe Syntax wie CREATE TABLE verwendet. ")
Sie können also einfach ausführen:
quelle
CONSTRAINT
Like aufgenommenALTER TABLE example ADD CONSTRAINT UNIQUE (a, b);
und Fehler bekommen. Vielen Dank!Die Standardnamen für Indizes in PostgreSQL sind:
{tablename}_{columnname(s)}_{suffix}
Dabei ist das Suffix eines der folgenden:
pkey
für eine Primärschlüsseleinschränkungkey
für eine eindeutige Einschränkungexcl
für eine Ausschlussbedingungidx
für jede andere Art von Indexfkey
für einen Fremdschlüsselcheck
für eine Check-EinschränkungStandard-Suffix für Sequenzen ist
seq
für alle SequenzenBeweis Ihrer EINZIGARTIGEN Einschränkung:
quelle
fkey
und dass mehrspaltige Fremdschlüsseleinschränkungen nur den Namen der ersten Spalte enthalten.CREATE TABLE mytable (mycolumn numeric UNIQUE);