Statement timeout in pg_rewind
Alexander Kukushkin <cyberdemn@gmail.com>
From: Alexander Kukushkin <cyberdemn@gmail.com>
To: PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2019-08-23T08:05:02Z
Lists: pgsql-hackers
Attachments
- pg_rewind-statement_timeout-v1.patch (text/x-patch) patch v1
Hi, It is quite common to set a global statement_timeout to a few seconds (or minutes) in postgresql.conf in order to avoid hitting a production server with slow/bad queries. This value is applied to all connections in the system unless it is redefined per database, user, or explicitly changed in the connection. Pg_rewind runs quite a few queries on the primary and if statement_timeout hits one of them it breaks the whole process. I can't tell for sure if this is an unrecoverable error or not and maybe the second run of pg_rewind would be able to finish the process. Even in case if retry is possible it makes it hard to use it for reliable automation. There are a few workarounds to this problem: 1. ALTER DATABASE postgres SET statement_timeout = 0; 2. ALTER rewind_username SET statement_timeout = 0; 3. Run export PGOPTIONS="-c statement_timeout=0" before calling pg_rwind. All of them have certain pros and cons. The third approach works good for automation, but IMHO we should simply fix pg_rewind itself and SET statement_timeout after establishing a connection, so everybody will benefit from it. Patch attached. Regards, -- Alexander Kukushkin
Commits
-
Disable timeouts when running pg_rewind with online source cluster
- e9dcbc9c3fb6 9.5.20 landed
- d64789e97cf6 9.6.16 landed
- 19bfa15a8274 10.11 landed
- f51006ea9657 11.6 landed
- e96f524433db 12.0 landed
- be182e4f9e89 13.0 landed