Как узнать, какая запись не удалась в транзакции массового обновления Postgres
Эта проблема
Я должен обновить несколько записей R1, R2, ..., Rn
в базе данных Postgres с использованием sqlalchemy. Операция должна быть атомарной; т.е. если Ri
Сбой всей транзакции должен быть откат.
Код выглядит примерно так:
try:
for instance_id in payload:
instance = get_or_404(instance_id)
sql = build_sql_for_patch(instance, payload)
db.session.add(sql)
db.session.commit()
except Exception:
db.session.rollback()
raise ValueError(...)
В случае ошибок, я хотел бы вернуть сообщение, подобное этому:
{
"errors": [
{"record": 1, "reason": "Something is wrong with record 1."},
{"record": 4, "reason": "Something is wrong with record 4."},
...
]
}
Вопрос
Есть ли способ получить ошибки транзакции Postgres с такой гранулярностью? В идеале я хотел бы получить ошибку для каждой неудачной записи. Если это невозможно, я хотел бы получить номер записи, которая не работает, с соответствующим сообщением об ошибке.