BUG #17303: statement_timeout does not work always
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?
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.
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
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