[Как можно] Найти это ограничение с помощью psql
Мы можем получить то же сообщение об ошибке, если нарушим ограничение первичного ключа.
# alter table addresses add constraint addresses_pk primary key (id);
ALTER TABLE
# insert into addresses values (1, 2, 4, 4);
ERROR: duplicate key value violates unique constraint "addresses_pk"
DETAIL: Key (id)=(1) already exists.
#
Попробуйте найти информационную схему where constraint_type = 'PRIMARY KEY'
.
Обратите внимание, что нам не нужно присваивать имени первичному ключу имя, поскольку Postgres сгенерирует значение по умолчанию <table_name>_pkey
.Таким образом, для того чтобы это было решением в вашем случае, это означает, что тот, кто создал первичный ключ, дал ему явное имя address_uniq
, что могло бы сбить с толку.
Так что более вероятная возможность состоит в том, что у вас есть уникальный индексна этих столбцах.Индексы не отображаются в информационной схеме.Вы можете проверить это следующим образом:
select * from pg_indexes where tablename = 'addresses';
[Как я могу] Изменить / обновить это ограничение и добавить еще 1 столбец к нему
Если ваша проблемаindex, затем сделайте следующее:
# drop index address_uniq;
DROP INDEX
# create unique index address_uniq on addresses (address, hostname, coin_id);
CREATE INDEX
#
Если выясняется, что это ограничение первичного ключа, это аналогичный процесс:
# alter table addresses drop constraint address_uniq;
ALTER TABLE
# alter table addresses add constraint address_uniq primary key (address, hostname,coin_id);
ALTER TABLE
#