@@ -498,6 +498,7 @@ spi_response_t *execute_spi_sql_with_args(MemoryContext ctx, const char *sql, in
498
498
ResourceOwner oldowner = CurrentResourceOwner ;
499
499
spi_response_t * rv = NULL ;
500
500
MemoryContext old = CurrentMemoryContext ;
501
+ MemoryContext pe ;
501
502
502
503
if (!ctx )ctx = SchedulerWorkerContext ;
503
504
@@ -523,7 +524,9 @@ spi_response_t *execute_spi_sql_with_args(MemoryContext ctx, const char *sql, in
523
524
}
524
525
PG_CATCH ();
525
526
{
527
+ pe = MemoryContextSwitchTo (ctx );
526
528
edata = CopyErrorData ();
529
+ MemoryContextSwitchTo (pe );
527
530
if (edata -> message )
528
531
{
529
532
rv = __error_spi_resp (ctx ,ret ,edata -> message );
@@ -600,6 +603,7 @@ spi_response_t *execute_spi_params_prepared(MemoryContext ctx, const char *sql,
600
603
ResourceOwner oldowner = CurrentResourceOwner ;
601
604
spi_response_t * rv ;
602
605
MemoryContext old = CurrentMemoryContext ;
606
+ MemoryContext pe ;
603
607
604
608
if (!ctx )ctx = SchedulerWorkerContext ;
605
609
@@ -637,7 +641,9 @@ spi_response_t *execute_spi_params_prepared(MemoryContext ctx, const char *sql,
637
641
}
638
642
PG_CATCH ();
639
643
{
644
+ pe = MemoryContextSwitchTo (ctx );
640
645
edata = CopyErrorData ();
646
+ MemoryContextSwitchTo (pe );
641
647
if (edata -> message )
642
648
{
643
649
rv = __error_spi_resp (ctx ,ret ,edata -> message );