Thread: BUG #17303: statement_timeout does not work always

BUG #17303: statement_timeout does not work always

From
PG Bug reporting form
Date:
The following bug has been logged on the website:

Bug reference:      17303
Logged by:          RekGRpth
Email address:      rekgrpth@gmail.com
PostgreSQL version: 10.19
Operating system:   ubuntu
Description:

in postgres 10.19
psql -c "SET statement_timeout = 1000;select pg_sleep(2);"
 pg_sleep 
----------
 
(1 row)

but
psql
psql (14.1 (Ubuntu 14.1-1.pgdg21.10+1), server 10.19 (Ubuntu
10.19-1.pgdg21.10+1))
Type "help" for help.

postgres=# SET statement_timeout = 1000;select pg_sleep(2);
SET
ERROR:  canceling statement due to statement timeout

and in postgres 14.1
psql -c "SET statement_timeout = 1000;select pg_sleep(2);"
ERROR:  canceling statement due to statement timeout

Why statement_timeout does not work always in postgres 10.19?


Re: BUG #17303: statement_timeout does not work always

From
"David G. Johnston"
Date:
On Mon, Nov 29, 2021 at 1:50 AM PG Bug reporting form <noreply@postgresql.org> wrote:
Why statement_timeout does not work always in postgres 10.19?

Due to questions like yours it was decided the behavior of "psql -c" needed to be changed.  But it is good software practice to not change such behavior on a minor release.  Thus the current version of 10 has the old behavior and the current version of 14 has the improved behavior (I don't recall when exactly it changed).  This is not a bug, it is just how softwares changes over time.

David J.

Re: BUG #17303: statement_timeout does not work always

From
Tom Lane
Date:
PG Bug reporting form <noreply@postgresql.org> writes:
> in postgres 10.19
> psql -c "SET statement_timeout = 1000;select pg_sleep(2);"
>  pg_sleep 
> ----------
 
> (1 row)

> Why statement_timeout does not work always in postgres 10.19?

When you use -c that way, the two statements are sent as a single Query
message.  PG versions before 11 interpreted the timeout as taking effect
beginning with the next Query message.  11 and later define it
differently.  There's no bug here, or at least nothing we're going to change.

A workaround you could use in older versions is to use two separate -c
switches (although you need a 9.6 or later psql for that).

            regards, tom lane



Re: BUG #17303: statement_timeout does not work always

From
RekGRpth
Date:
Ok, thanks.

I solve it by

psql -c "BEGIN;SET statement_timeout = 1000;COMMIT;select pg_sleep(2);"
ERROR:  canceling statement due to statement timeout

this works in both 10.19 and 14.1

пн, 29 нояб. 2021 г. в 19:53, Tom Lane <tgl@sss.pgh.pa.us>:
>
> PG Bug reporting form <noreply@postgresql.org> writes:
> > in postgres 10.19
> > psql -c "SET statement_timeout = 1000;select pg_sleep(2);"
> >  pg_sleep
> > ----------
>
> > (1 row)
>
> > Why statement_timeout does not work always in postgres 10.19?
>
> When you use -c that way, the two statements are sent as a single Query
> message.  PG versions before 11 interpreted the timeout as taking effect
> beginning with the next Query message.  11 and later define it
> differently.  There's no bug here, or at least nothing we're going to change.
>
> A workaround you could use in older versions is to use two separate -c
> switches (although you need a 9.6 or later psql for that).
>
>                         regards, tom lane