Есть код, который делает запросы к API и вносит изменения в базу. Изначально он был синхронным и работал без ошибок. Когда я переписал его для использования в воркерах, стал падать с ошибкой:
> "INSERT INTO main_user_groups (group_id, user_id)"
psycopg2.IntegrityError: duplicate key value violates unique constraint "main_user_groups_user_id_group_id_dce92137_uniq
DETAIL: Key (user_id, group_id)=(1623, 2) already exists.
Вот кусок кода, на котором падает:
if row:
user_id_rel = row[0]
cur.execute( # psycopg2.cursor
f"INSERT INTO main_user_groups (group_id, user_id) "
f"VALUES ('{group_ID_rel}', '{user_id_rel}');"
)
else:
...
Все остальные треды падают с ошибкой:
> "UPDATE main_group "
psycopg2.InternalError: current transaction is aborted, commands ignored until end of transaction block
Я пытался пофиксить это через
try/except + cursor.rollback()
и
INSERT + ON CONFLICT UPDATE
, оно не получилось.
Судя по всему, код падает из-за совпадения текущей пары с уже существующей в базе. Можно ли этот поправить без совершения запросов на проверку существования пары , т.к. они медленные?