diff --git a/odoo/addons/base/ir/ir_logging.py b/odoo/addons/base/ir/ir_logging.py
index 4e3caef0794a5a9a3cf7f7547389e616de787414..f672a76edff9289aa164d7ab6436adbc467b72e3 100644
--- a/odoo/addons/base/ir/ir_logging.py
+++ b/odoo/addons/base/ir/ir_logging.py
@@ -34,4 +34,10 @@ class IrLogging(models.Model):
     @api.model_cr
     def init(self):
         super(IrLogging, self).init()
-        self._cr.execute("ALTER TABLE ir_logging DROP CONSTRAINT IF EXISTS ir_logging_write_uid_fkey")
+        self._cr.execute("select 1 from information_schema.constraint_column_usage where table_name = 'ir_logging' and constraint_name = 'ir_logging_write_uid_fkey'")
+        if self._cr.rowcount:
+            # DROP CONSTRAINT unconditionally takes an ACCESS EXCLUSIVE lock
+            # on the table, even "IF EXISTS" is set and not matching; disabling
+            # the relevant trigger instead acquires SHARE ROW EXCLUSIVE, which
+            # still conflicts with the ROW EXCLUSIVE needed for an insert
+            self._cr.execute("ALTER TABLE ir_logging DROP CONSTRAINT ir_logging_write_uid_fkey")
diff --git a/odoo/netsvc.py b/odoo/netsvc.py
index 84e9702479b97157bfec0ff26ef76924041938b0..dac9b433e8c4ac847a048adfe7c2efad7ffed187 100644
--- a/odoo/netsvc.py
+++ b/odoo/netsvc.py
@@ -54,7 +54,7 @@ def LocalService(name):
 path_prefix = os.path.realpath(os.path.dirname(os.path.dirname(__file__)))
 
 class PostgreSQLHandler(logging.Handler):
-    """ PostgreSQL Loggin Handler will store logs in the database, by default
+    """ PostgreSQL Logging Handler will store logs in the database, by default
     the current database, can be set using --log-db=DBNAME
     """
     def emit(self, record):
@@ -64,7 +64,8 @@ class PostgreSQLHandler(logging.Handler):
         if not dbname:
             return
         with tools.ignore(Exception), tools.mute_logger('odoo.sql_db'), sql_db.db_connect(dbname, allow_uri=True).cursor() as cr:
-            cr.autocommit(True)
+            # preclude risks of deadlocks
+            cr.execute("SET LOCAL statement_timeout = 1000")
             msg = tools.ustr(record.msg)
             if record.args:
                 msg = msg % record.args