Hi, Due to a debug ereport I just noticed that worker.c's slot_store_error_callback is doing something quite dangerous:
static void slot_store_error_callback(void *arg) { SlotErrCallbackArg *errarg = (SlotErrCallbackArg *) arg; LogicalRepRelMapEntry *rel; char *remotetypname; Oid remotetypoid, localtypoid; /* Nothing to do if remote attribute number is not set */ if (errarg->remote_attnum < 0) return; rel = errarg->rel; remotetypoid = rel->remoterel.atttyps[errarg->remote_attnum]; /* Fetch remote type name from the LogicalRepTypMap cache */ remotetypname = logicalrep_typmap_gettypname(remotetypoid); /* Fetch local type OID from the local sys cache */ localtypoid = get_atttype(rel->localreloid, errarg->local_attnum + 1); errcontext("processing remote data for replication target relation \"%s.%s\" column \"%s\", " "remote type %s, local type %s", rel->remoterel.nspname, rel->remoterel.relname, rel->remoterel.attnames[errarg->remote_attnum], remotetypname, format_type_be(localtypoid)); } that's not code that can run in an error context callback. It's theoretically possible (but unlikely) that logicalrep_typmap_gettypname() is safe to run in an error context callback. But get_atttype() definitely isn't. get_attype() may do catalog accesses. That definitely can't happen inside an error context callback - the entire transaction might be borked at this point! I think this was basically broken from the start in commit 665d1fad99e7b11678b0d5fa24d2898424243cd6 Author: Peter Eisentraut <pete...@gmx.net> Date: 2017-01-19 12:00:00 -0500 Logical replication but then got a lot worse in commit 24c0a6c649768f428929e76dd7f5012ec9b93ce1 Author: Alvaro Herrera <alvhe...@alvh.no-ip.org> Date: 2018-03-14 21:34:26 -0300 logical replication: fix OID type mapping mechanism Greetings, Andres Freund