У меня есть следующая таблица:
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
ограничение на этом этапе?
sql
database
postgresql
indexing
unique-constraint
Томас Браун
источник
источник
Ответы:
psql
встроенная справка:\h ALTER TABLE
Также задокументировано в документации postgres (отличный ресурс, к тому же легко читаемый).
ALTER TABLE tablename ADD CONSTRAINT constraintname UNIQUE (columns);
источник
ALTER TABLE tablename ADD UNIQUE (columns);
. (Обратите внимание, чтоCONSTRAINT
ключевое слово необходимо опустить.)Да, ты можешь. Но если в вашей таблице есть неуникальные записи, это не удастся. Вот как добавить уникальное ограничение в вашу таблицу. Если вы используете PostgreSQL 9.x, следуйте приведенным ниже инструкциям.
CREATE UNIQUE INDEX constraint_name ON table_name (columns);
источник
Если у вас была таблица, в которой уже были существующие ограничения, основанные на let 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);
источник
Да, вы можете добавить ограничение UNIQUE постфактум. Однако, если в вашей таблице есть неуникальные записи, Postgres будет жаловаться на это, пока вы их не исправите.
источник
select <column> from <table> group by 1 having count(*) > 1;
даст отчет о повторяющихся значениях.