statement_timeout прерывает запрос, если он работает дольше лимита. Postgres бросает ERROR: canceling statement due to statement timeout.
На практике ставят на уровне роли приложения — не глобально:
ALTER ROLE app SET statement_timeout = '3s';
-- или на сессию при открытии соединения:
SET statement_timeout = '10s';
Глобально в postgresql.conf — риск: попадут VACUUM, REINDEX, ALTER TABLE, pg_dump и запросы обслуживания. Autovacuum и autoanalyze — фоновые воркеры вне сессии, не затронуты.
statement_timeout отсчитывает время с начала выполнения, включая ожидание блокировки. Для долгого lock-wait — lock_timeout. Для брошенных транзакций — idle_in_transaction_session_timeout.
#postgresql #sysadmin #database
