Почему я получаю ошибку дублирующего ключа при обновлении строки? - PullRequest
2 голосов
/ 09 июня 2010

Я использую postgres и получаю сообщение об ошибке дубликата ключа при обновлении строки:

cursor.execute("UPDATE jiveuser SET userenabled = 0 WHERE userid = %s" % str(userId))
psycopg2.IntegrityError: duplicate key value violates unique constraint "jiveuser_pk"

Я не понимаю, как обновление строки может вызвать эту ошибку ... любая помощь будет высоко ценится.

Ответы [ 4 ]

3 голосов
/ 09 июня 2010

Ошибка может показывать, что столбец userenabled участвует в первичном ключе jiveuser_pk. Я предполагаю, что и userid, и userenabled участвуют в первичном ключе, и что у вас уже есть userid, где userenabled равно нулю.

1 голос
/ 09 июня 2010

Триггеры. Выясните, что сделал ваш администратор баз данных, когда вы не искали, что вызывает срабатывание и выполняет все виды случайных действий, о которых вы даже не подозревали, и ИТ-служба вызвала двойную ошибку и вызвала ошибку вашей транзакции.

0 голосов
/ 09 июня 2010

Вам необходимо знать компоненты первичного ключа, чтобы знать. Попробуйте запустить \d jiveuser_pk из командной строки. Я предполагаю, что PK в этой таблице (userid, userenabled) или что после обновления запущен какой-то триггер.

0 голосов
/ 09 июня 2010

Может произойти, если userenabled является частью ключа и установка его в 0 сталкивается с другим ключом с тем же значением.

Также возможно, что здесь есть триггер, хотя и менее вероятно, чем простой ключСтолкновение.

Полагаю, что для полного ответа нам нужно выяснить, что является первичным ключом для этой таблицы.

...