Ответ 1
psql
встроенная справка:
\h ALTER TABLE
Также документировано в postgres docs (отличный ресурс, а также легко читаемый).
ALTER TABLE tablename ADD CONSTRAINT constraintname UNIQUE (columns);
У меня есть следующая таблица:
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?
Спасибо,
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);
Да, после факта вы можете добавить ограничение UNIQUE. Однако, если у вас есть не уникальные записи в вашей таблице, Postgres будет жаловаться на это, пока вы их не исправите.
Если у вас была таблица, у которой уже были существующие ограничения, основанные на 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);