tgoop.com/proglibrary/9578
Last Update:
🐘🔧 Расширение pg_variables: мощная альтернатива временным таблицам в PostgreSQL
Расширение pg_variables
для PostgreSQL предлагает альтернативу временным таблицам для эффективной работы с промежуточными данными, но имеет свои преимущества и недостатки, требующие тщательного анализа перед внедрением:
🔸 Оно позволяет определять скалярные сессионные переменные, которые могут быть очень ценными для хранения идентификатора пользователя, от имени которого выполняется запрос, и его различных атрибутов.
🔸 Оно содержит функции для работы с переменными различных типов. Созданные переменные существуют в течение текущей пользовательской сессии.
🔸 По умолчанию эти переменные создаются без поддержки транзакций. Если переменная успешно создана, она остаётся доступной в течение всего сеанса, даже если происходят откаты транзакций.
Если вы хотите использовать переменную с поддержкой транзакций и точек сохранения, необходимо передать дополнительный флаг is_transactional
в последний параметр функции, которая создаёт переменную.
Флаг is_transactional
нужно указывать каждый раз, когда вы изменяете значение транзакционной переменной с помощью функций pgv_set()
и pgv_insert()
. В противном случае возникнет ошибка. Другим функциям передавать этот флаг не нужно.
Если вызовы функций pgv_free()
или pgv_remove()
откатываются, затронутые транзакционные переменные восстанавливаются. В отличие от них, нетранзакционные переменные удаляются безвозвратно.