Необязательно менять
statement_timeout, work_mem или другие параметры для всей сессии. SET LOCAL действует только до конца текущей транзакции.BEGIN;
SET LOCAL lock_timeout = '500ms';
ALTER TABLE orders
ADD COLUMN source text;
COMMIT;
Так миграция не будет бесконечно ждать блокировку: если таблица занята дольше заданного времени, PostgreSQL завершит операцию ошибкой.
BEGIN;
SET LOCAL work_mem = '512MB';
SELECT customer_id, count(*)
FROM events
GROUP BY customer_id;
COMMIT;
Можно даже точечно дать тяжёлому запросу больше памяти, не увеличивая
work_mem для остальных запросов соединения.🔥
SET LOCAL позволяет тюнить PostgreSQL под конкретную операцию и автоматически возвращает настройки назад после COMMIT или ROLLBACK.➡️ SQL Ready | #совет
