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