PostgreSQL: имена ограничений по умолчанию - PullRequest
64 голосов
/ 05 ноября 2010

При создании таблицы в 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. Если нет, следует ли вообще избегать имен по умолчанию для предотвращения несоответствий?

Ответы [ 2 ]

210 голосов
/ 05 ноября 2010

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

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

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

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

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

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

Доказательство вашего УНИКАЛЬНОГО ограничения:

УВЕДОМЛЕНИЕ: СОЗДАЙТЕ ТАБЛИЦУ / УНИКАЛЬНО создать неявный индекс "example_a_b_key" для таблицы "example"

29 голосов
/ 05 ноября 2010

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

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

ALTER TABLE example ADD UNIQUE (a, b);
...