PostgreSQL: имена ограничений по умолчанию
при создании таблицы в 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);
Это вызвало некоторые несоответствия имен в проектах, над которыми я работал, и вызывает следующие вопросы:
есть ли простой способ добавить ограничение к существующей таблице с именем, которое она получила бы, если бы была добавлена во время таблицы творение?
Если нет, следует ли вообще избегать имен по умолчанию, чтобы предотвратить несоответствия?
2 ответов:
на руководство довольно ясно об этом ("tableconstraint: эта форма добавляет новое ограничение к таблице, используя тот же синтаксис, что и CREATE TABLE.")
Так что вы можете просто запустить:
ALTER TABLE example ADD UNIQUE (a, b);
стандартные имена индексов в PostgreSQL:
{tablename}_{columnname(s)}_{suffix}где суффикс является одним из следующих:
pkeyдля ограничения первичного ключаkeyдля ограничения Uniqueexclдля ограничения отчужденияidxдля любого другого вида индексаfkeyдля внешнего ключаcheckчтобы проверить ограничениестандартный суффикс для последовательности
seqдля всех последовательностейдоказательство вашего уникального ограничения:
Примечание: создать таблицу / уникальный будет создание неявного индекса "example_a_b_key" для таблицы "example"
Comments