Уникальное ограничение по сравнению с уникальным индексом?

Есть ли разница между:

CREATE TABLE p(
    product_no integer,
    name text UNIQUE,
    price numeric
);

а также:

CREATE TABLE p(
        product_no integer,
        name text,
        price numeric
 );
CREATE UNIQUE INDEX customername
  ON p
  USING btree
  (name COLLATE pg_catalog."default");

Назовите это имя уникальным в обоих случаях? Что это означает, когда индекс уникален?

EDIT: Уникальное ограничение Postgres vs index не отвечает на мой вопрос. Он рассматривает случай с FK. Мой вопрос не имеет ничего общего с FK. Я просто хочу знать, являются ли эти две операции эквивалентными в этом примере, где не задействован FK.

+1
источник поделиться
2 ответа

Да, там небольшая разница. Если вы определяете уникальное ограничение, это видно в каталогах, таких как information_schema. Это не относится к уникальному индексу.

Кроме того, вы можете создавать такие вещи, как частичные уникальные индексы, но вы не можете сделать это при ограничении.

Наконец, уникальные ограничения являются стандартами SQL.

Уникальное ограничение подразумевает создание уникального индекса, но не наоборот.

Используйте уникальное ограничение, если у вас нет оснований для прямого создания уникального индекса.

+3
источник

Из документации

Добавление уникального ограничения автоматически создаст уникальный индекс btree для столбца или группы столбцов, используемых в ограничении

Поэтому для упрощенного примера они эквивалентны

+2
источник

Посмотрите другие вопросы по меткам или Задайте вопрос