Могу ли я добавить ограничение 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
Я не хочу, чтобы когда-либо было больше чем один столбец для любого данного tickername
/tickerbbname
пара. Я уже создал таблицу и в ней много данных (которые, как я уже убедился, соответствуют уникальным критериям). Однако по мере того, как он становится больше, появляется пространство для ошибок.
Есть ли способ добавить UNIQUE
ограничение в этой точке?
4 ответа
psql
Встроенная помощь:
\h ALTER TABLE
Также задокументировано в документации postgres (отличный ресурс, плюс легко читаемый тоже).
ALTER TABLE tablename ADD CONSTRAINT constraintname UNIQUE (columns);
Да, ты можешь. Но если у вас есть неуникальные записи на вашей таблице, это не удастся. Вот как добавить уникальное ограничение на вашу таблицу. Если вы используете PostgreSQL 9.x, вы можете следовать приведенным ниже инструкциям.
CREATE UNIQUE INDEX constraint_name ON table_name (columns);
Если у вас была таблица, в которой уже существовали ограничения на основе, скажем, имени и фамилии, и вы хотели добавить еще одно уникальное ограничение, вы должны были удалить все ограничения:
ALTER TABLE your_table DROP CONSTRAINT constraint_name;
Убедитесь, что новое ограничение, которое вы хотите добавить, является уникальным / не нулевым (если это Microsoft Sql, оно может содержать только одно нулевое значение) для всех данных в этой таблице, и затем вы можете воссоздать его.
ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... column_n);
Да, вы можете добавить уникальное ограничение после факта. Однако, если в вашей таблице есть неуникальные записи, Postgres будет жаловаться на это, пока вы не исправите их.