Comments 6
Здорово, хороший материал
Спасибо за статью, кратко и полезно.
Не раскрыт вариант с set_config(setting_name
, new_value
, is_local
)
Если параметр is_local равен true, новое значение будет действовать только в рамках текущей транзакции.
https://postgrespro.ru/docs/postgresql/9.6/functions-admin
Это тема для отдельной статьи, так как уровней установки параметров 7 🙂. Например, "будет действовать только в рамках транзакции" не всегда верно, так как SET LOCAL (эквивалент set_config(параметр, значение, true)) перекрывается на уровне функции опцией SET.
В документации это описано на 4 разных страницах. Здесь в одном месте (слайды170,171):


Интересно узнать как использовать set_config именно в виде хранения временных переменных. И статью на эту тему было бы интересно почитать.
П.С. Использовал set_config в следующем кейсе: указание автора изменений перед изменениями в транзакции, триггер на изменения логировал автора изменений.
Этот способ не упоминают и не рекомендуют, потому, что считается, что параметры для хранения временных данных не предназначены; хранить составные типы не удобно, так как хранят только строку; планируют добавить сессионные переменные. Практически для хранения нескольких переменных set_config()/current_setting() можно использовать, как вы и делаете.
Хранение временных данных в PostgreSQL