BUG #17303: statement_timeout does not work always

Started by PG Bug reporting formover 4 years ago4 messagesbugs
Jump to latest
#1PG Bug reporting form
noreply@postgresql.org

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?

#2David G. Johnston
david.g.johnston@gmail.com
In reply to: PG Bug reporting form (#1)
Re: BUG #17303: statement_timeout does not work always

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.

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: PG Bug reporting form (#1)
Re: BUG #17303: statement_timeout does not work always

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

#4RekGRpth
rekgrpth@gmail.com
In reply to: Tom Lane (#3)
Re: BUG #17303: statement_timeout does not work always

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>:

Show quoted text

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