Могу ли я добавить уникальное ограничение в таблицу 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

Я не хочу, чтобы когда-либо было более одного столбца для любого данного tickername/tickerbbname пара. Я уже создал таблицу и имею в ней много данных (которые я уже обеспечил соответствие уникальным критериям). Однако по мере того, как он становится больше, появляется возможность ошибки.

есть ли способ, чтобы добавить UNIQUE ограничения на данный момент?

4 ответов


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

\h ALTER TABLE

также зафиксированы в postgres docs (отличный ресурс, плюс легко читается, тоже).

ALTER TABLE tablename ADD CONSTRAINT constraintname UNIQUE (columns);

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

CREATE UNIQUE INDEX constraint_name ON table_name (columns);

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


Если у вас была таблица, которая уже имела существующие ограничения, основанные на lets say: 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);