PostgreSQL: имена ограничений по умолчанию - программирование
Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

ALTER TABLE example ADD UNIQUE (a, b);

Ответ 2

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

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

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

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

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

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

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

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