Я могу добавить ограничение уникальности для таблицы в 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;
убедитесь, что новое ограничение, которое вы хотите добавить, является уникальным/ не нулевым ( если его Microsoft Sql, он может содержать только одно нулевое значение) во всех данных в этой таблице, а затем вы можете повторно создать его.
ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... column_n);