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);


Это вызвало некоторые несоответствия имен в проектах, над которыми я работал, и вызывает следующие вопросы:




  1. есть ли простой способ добавить ограничение к существующей таблице с именем, которое она получила бы, если бы была добавлена во время таблицы творение?


  2. Если нет, следует ли вообще избегать имен по умолчанию, чтобы предотвратить несоответствия?


540   2  

2 ответов:

на руководство довольно ясно об этом ("tableconstraint: эта форма добавляет новое ограничение к таблице, используя тот же синтаксис, что и CREATE TABLE.")

Так что вы можете просто запустить:

ALTER TABLE example ADD UNIQUE (a, b);

стандартные имена индексов в PostgreSQL:

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

где суффикс является одним из следующих:

  • pkey для ограничения первичного ключа
  • key для ограничения Unique
  • excl для ограничения отчуждения
  • idx для любого другого вида индекса
  • fkey для внешнего ключа
  • check чтобы проверить ограничение

стандартный суффикс для последовательности

  • seq для всех последовательностей

доказательство вашего уникального ограничения:

Примечание: создать таблицу / уникальный будет создание неявного индекса "example_a_b_key" для таблицы "example"

Comments

    Ничего не найдено.