diff --git a/src/backend/access/transam/parallel.c b/src/backend/access/transam/parallel.c index 934dba8..d2105ec 100644 --- a/src/backend/access/transam/parallel.c +++ b/src/backend/access/transam/parallel.c @@ -775,6 +775,7 @@ HandleParallelMessage(ParallelContext *pcxt, int i, StringInfo msg) ErrorData edata; ErrorContextCallback errctx; ErrorContextCallback *save_error_context_stack; + int save_client_encoding; /* * Rethrow the error using the error context callbacks that @@ -787,9 +788,14 @@ HandleParallelMessage(ParallelContext *pcxt, int i, StringInfo msg) errctx.previous = pcxt->error_context_stack; error_context_stack = &errctx; + save_client_encoding = pg_get_client_encoding(); + SetClientEncoding(GetDatabaseEncoding()); + /* Parse ErrorResponse or NoticeResponse. */ pq_parse_errornotice(msg, &edata); + SetClientEncoding(save_client_encoding); + /* Death of a worker isn't enough justification for suicide. */ edata.elevel = Min(edata.elevel, ERROR); @@ -989,6 +995,7 @@ ParallelWorkerMain(Datum main_arg) StartTransactionCommand(); RestoreGUCState(gucspace); CommitTransactionCommand(); + SetClientEncoding(GetDatabaseEncoding()); /* Crank up a transaction state appropriate to a parallel worker. */ tstatespace = shm_toc_lookup(toc, PARALLEL_KEY_TRANSACTION_STATE);