Re: BUG #16988: Spurious "SET LOCAL can only be used in transaction blocks" warning using implicit transaction block - Mailing list pgsql-bugs

From Brar Piening
Subject Re: BUG #16988: Spurious "SET LOCAL can only be used in transaction blocks" warning using implicit transaction block
Date
Msg-id 3a158f8d-708e-ad13-617a-af8349aae4f4@gmx.de
Whole thread Raw
In response to Re: BUG #16988: Spurious "SET LOCAL can only be used in transaction blocks" warning using implicit transaction block  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: BUG #16988: Spurious "SET LOCAL can only be used in transaction blocks" warning using implicit transaction block  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-bugs
Tom Lane wrote:
> PG Bug reporting form <noreply@postgresql.org> writes:
>> I am using SET LOCAL in an Npgsql multi-statement command.
> It seems that whatever Npgsql is doing at the wire protocol level
> doesn't match this, but they'd have to explain what they are doing
> for us to offer much help.
>
At the wire protocol level npgsql sends this as two queries via the
extended query protocol without a sync inbetween them.

(Parse,Bind,Describe,Execute;Parse,Bind,Describe,Execute,Sync)

You can use the following short libpq program to reproduce it in PG14
(for brevity I've omitted any error checking):

#include  <libpq-fe.h>

int
main(int  argc,char  **argv)
{
     PGconn* conn;
     PGresult* res;

     conn =PQconnectdb("");
     PQenterPipelineMode(conn);
     PQsendQueryParams(conn,"SET LOCAL work_mem = 100;",0,NULL,NULL,NULL,NULL,1);
     PQsendQueryParams(conn,"SHOW work_mem;",0,NULL,NULL,NULL,NULL,1);
     PQpipelineSync(conn);
     res =PQgetResult(conn);// SET LOCAL => PGRES_COMMAND_OK
     PQclear(res);
     PQgetResult(conn);// NULL
     res =PQgetResult(conn);// SHOW => PGRES_TUPLES_OK
     fprintf(stdout,"%s\n",PQgetvalue(res,0,0));
     PQclear(res);
     PQgetResult(conn);// NULL
     res =PQgetResult(conn);// PGRES_PIPELINE_SYNC
     PQclear(res);
     PQfinish(conn);
     return  0;
}

Regards,
Brar





pgsql-bugs by date:

Previous
From: Andrey Borodin
Date:
Subject: Re: CREATE INDEX CONCURRENTLY does not index prepared xact's data
Next
From: Tom Lane
Date:
Subject: Re: BUG #16988: Spurious "SET LOCAL can only be used in transaction blocks" warning using implicit transaction block