Подтвердить что ты не робот

Можно ли добавить ограничение UNIQUE в таблицу PostgreSQL после ее создания?

У меня есть следующая таблица:

 tickername | tickerbbname  | tickertype
------------+---------------+------------
 USDZAR     | USDZAR Curncy | C
 EURCZK     | EURCZK Curncy | C
 EURPLN     | EURPLN Curncy | C
 USDBRL     | USDBRL Curncy | C
 USDTRY     | USDTRY Curncy | C
 EURHUF     | EURHUF Curncy | C
 USDRUB     | USDRUB Curncy | C

в котором я не хочу, чтобы ни одно из тиковых имен или записей столбца tickerbbname никогда не повторялось. Я уже создал таблицу и имею в ней много данных (которые я уже проверил, чтобы быть уникальными). По мере того, как он становится все больше, пространство для ошибки ползет. Любой способ добавления ограничений UNIQUE ex-post?

Спасибо,

4b9b3361

Ответ 1

psql встроенная справка:

\h ALTER TABLE

Также документировано в postgres docs (отличный ресурс, а также легко читаемый).

ALTER TABLE tablename ADD CONSTRAINT constraintname UNIQUE (columns);

Ответ 2

Да, вы можете. Но если у вас есть уникальные записи в таблице, это не удастся. Вот как добавить уникальное ограничение в таблицу. Если вы используете PostgreSQL 9.x, вы можете следовать инструкциям ниже.

CREATE UNIQUE INDEX constraint_name ON table_name (columns);

Ответ 3

Да, после факта вы можете добавить ограничение UNIQUE. Однако, если у вас есть не уникальные записи в вашей таблице, Postgres будет жаловаться на это, пока вы их не исправите.

Ответ 4

Если у вас была таблица, у которой уже были существующие ограничения, основанные на let, скажем: name и lastname, и вы хотели бы добавить еще одно уникальное ограничение, вам пришлось отказаться от всего ограничения:

ALTER TABLE your_table DROP CONSTRAINT constraint_name;

Убедитесь, что новое ограничение, которое вы хотите добавить, уникально/не равно null (если его Microsoft Sql, он может содержать только одно значение null) для всех данных в этой таблице, а затем вы можете его повторно создать.

ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... column_n);