咨询PostgreSQL中SET后接SET LOCAL的特殊场景执行逻辑
PostgreSQL 同一事务中 SET 与 SET LOCAL 的特殊行为解析
在单个事务里先后执行SET和SET LOCAL时,事务执行过程中会使用SET LOCAL设置的参数值;等事务提交完成后,SET设置的会话级参数值就会正式生效。
PostgreSQL官方文档对此的说明如下:
SET LOCAL的作用仅持续到当前事务结束,无论事务是否提交。一种特殊情况是在单个事务中先执行SET再执行SET LOCAL:在事务结束前会使用SET LOCAL设置的值,但事务提交后,SET设置的值将生效。
可以用一段SQL示例直观理解这个逻辑:
-- 启动事务 BEGIN; -- 设置会话级参数(提交后生效) SET work_mem = '64MB'; -- 设置事务级临时参数(当前事务内生效) SET LOCAL work_mem = '128MB'; -- 此时查询参数,返回的是128MB,用的是SET LOCAL的值 SHOW work_mem; -- 提交事务 COMMIT; -- 再次查询,返回64MB,SET的会话级值开始生效 SHOW work_mem;
内容的提问来源于stack exchange,提问作者Kingpin2k
相关产品推荐
相关产品推荐

