Как изменить таблицу PostgreSQL и сделать столбец уникальным?

166

У меня есть таблица в PostgreSQL, где схема выглядит следующим образом:

CREATE TABLE "foo_table" (
    "id" serial NOT NULL PRIMARY KEY,
    "permalink" varchar(200) NOT NULL,
    "text" varchar(512) NOT NULL,
    "timestamp" timestamp with time zone NOT NULL
)

Теперь я хочу сделать постоянную ссылку уникальной для всей таблицы, изменив таблицу. Кто-нибудь может мне помочь с этим?

ТИА

Baishampayan Ghose
источник
2
create unique index on foo_table (permalink)
a_horse_with_no_name

Ответы:

270

Я понял это из документации PostgreSQL, точный синтаксис:

ALTER TABLE the_table ADD CONSTRAINT constraint_name UNIQUE (thecolumn);

Спасибо, Фред .

Baishampayan Ghose
источник
231

Или пусть БД автоматически назначит имя ограничения, используя:

ALTER TABLE foo ADD UNIQUE (thecolumn);
Клинт Пахл
источник
1
Если вы сделаете это, postgres собирается создать ограничение, но имя будет «автоматически» назначено, это слово «добавить». Я только что попробовал
Санти
1
Когда я использую приведенный выше синтаксис, Postgress создает новое противоречие с именем, которое mytable_mycolumn_key меня вполне устраивает :-)
Адам
41

Также возможно создать уникальное ограничение из более чем одного столбца:

ALTER TABLE the_table 
    ADD CONSTRAINT constraint_name UNIQUE (column1, column2);
Стефан
источник
Похоже, что это не работает для чего-то вроде: ALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE (payload::text, name);илиALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE ((payload::text), name);
writofmandamus