Как изменить таблицу 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
)

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

ТИА


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

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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.