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