DBAtlas · Atlas d'exploitation des bases de données

Définir statement_timeout / lock_timeout par rôle et par base

PostgreSQLSessions

Commande

-- Application role: short queries, short lock waits, a limit on forgotten transactions
ALTER ROLE web_app SET statement_timeout = '30s';
ALTER ROLE web_app SET lock_timeout = '5s';
ALTER ROLE web_app SET idle_in_transaction_session_timeout = '10min';

-- Let the reporting role run longer, only in this database
ALTER ROLE report_app IN DATABASE mydb SET statement_timeout = '15min';

-- Show configured role/database settings
SELECT coalesce(r.rolname, '(all)') AS role,
       coalesce(d.datname, '(all)') AS database,
       s.setconfig
FROM pg_db_role_setting s
LEFT JOIN pg_roles r ON r.oid = s.setrole
LEFT JOIN pg_database d ON d.oid = s.setdatabase
ORDER BY 1, 2;

-- Revert
ALTER ROLE web_app RESET lock_timeout;

Ce que fait la commande

Rend les paramètres de timeout persistants au niveau du rôle (et éventuellement de la base), afin que chaque charge s'exécute avec ses propres limites sans toucher au réglage global.

Quand l'utiliser

Pour éviter que des requêtes incontrôlées n'épuisent les ressources, que des files de DDL/verrous ne figent l'application, et que des transactions oubliées ne produisent du bloat.

Attention

Les réglages ne s'appliquent qu'aux NOUVELLES sessions ; recyclez les connexions existantes des pools. Les utilisateurs peuvent remplacer la valeur avec SET dans leur session ; ce n'est pas une frontière de sécurité. Ne définissez pas statement_timeout globalement dans postgresql.conf : les tâches de maintenance comme pg_dump, VACUUM et CREATE INDEX seraient aussi annulées. Priorité : rôle+base > rôle > base > postgresql.conf.

Ouvrir dans DBAtlas →

Voir aussi