Re: BUG #16988: Spurious "SET LOCAL can only be used in transaction blocks" warning using implicit transaction block
От | Brar Piening |
---|---|
Тема | Re: BUG #16988: Spurious "SET LOCAL can only be used in transaction blocks" warning using implicit transaction block |
Дата | |
Msg-id | 3a158f8d-708e-ad13-617a-af8349aae4f4@gmx.de обсуждение исходный текст |
Ответ на | 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>) |
Ответы |
Re: BUG #16988: Spurious "SET LOCAL can only be used in transaction blocks" warning using implicit transaction block
|
Список | 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 по дате отправления: