При создании таблицы в PostgreSQL будут назначены имена ограничений по умолчанию, если они не указаны:
CREATE TABLE example (
a integer,
b integer,
UNIQUE (a, b)
);
Но при ALTER TABLE
добавлении ограничения кажется, что имя обязательно:
ALTER TABLE example ADD CONSTRAINT my_explicit_constraint_name UNIQUE (a, b);
Это вызвало некоторые несоответствия в названиях проектов, над которыми я работал, и вызывает следующие вопросы:
Есть ли простой способ добавить ограничение к существующей таблице с именем, которое оно получило бы при добавлении во время создания таблицы?
Если нет, следует ли вообще избегать имен по умолчанию, чтобы избежать несоответствий?
postgresql
naming-conventions
constraints
Ян Маккиннон
источник
источник
Ответы:
В руководстве это довольно ясно (« ограничение таблицы: эта форма добавляет новое ограничение в таблицу с использованием того же синтаксиса, что и CREATE TABLE ».)
Итак, вы можете просто запустить:
источник
CONSTRAINT
лайкALTER TABLE example ADD CONSTRAINT UNIQUE (a, b);
и получил ошибки. Спасибо!Стандартные имена индексов в PostgreSQL:
{tablename}_{columnname(s)}_{suffix}
где суффикс может быть одним из следующих:
pkey
для ограничения первичного ключаkey
для уникального ограниченияexcl
для ограничения исключенияidx
для любого другого индексаfkey
для внешнего ключаcheck
для проверки ограниченияСтандартный суффикс для последовательностей -
seq
для всех последовательностейДоказательство вашего UNIQUE-ограничения:
источник
fkey
и что ограничения внешнего ключа с несколькими столбцами, похоже, включают только имя первого столбца.CREATE TABLE mytable (mycolumn numeric UNIQUE);