From 888d73129d311c4e10f5f64fe3b243f7bd1d19ec Mon Sep 17 00:00:00 2001 From: =?utf-8?q?C=C3=A9lestin=20Matte?= Date: Mon, 5 Jun 2023 15:36:29 +0200 Subject: [PATCH] load_message: catch postgres UniqueViolation errors when importing messages When importing an entire mbox, create a savepoint at every message, and rollback in case of an error with a message to be able to keep importing the rest of the mbox --- loader/load_message.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/loader/load_message.py b/loader/load_message.py index 2357c6e..1522e63 100755 --- a/loader/load_message.py +++ b/loader/load_message.py @@ -155,7 +155,14 @@ if __name__ == "__main__": log_failed_message(listid, "mbox", opt.mbox, ap, e) opstatus.failed += 1 continue - ap.store(conn, listid, opt.overwrite, opt.overwrite) + try: + curs.execute("SAVEPOINT savepoint;") + ap.store(conn, listid, opt.overwrite, opt.overwrite) + except psycopg2.errors.UniqueViolation as e: + curs.execute("ROLLBACK TO SAVEPOINT savepoint;") + log_failed_message(listid, "mbox", opt.mbox, ap, "Failed loading message: already present in another list: %s" % e) + opstatus.failed += 1 + conn.commit() purges.update(ap.purges) if mboxparser.returncode(): log.error("Failed to parse mbox:") -- 2.41.0