当前位置: 首页 > news >正文

函数的稳定性表现差异 IMMUTABLE | STABLE | VOLATILE

抖一抖!原来函数还有稳不稳定的说法

    • 函数的稳定性
      • 构造测试环境
      • 在事务里调用
      • 同一条SQL里调用
      • WHERE后调用

函数的稳定性

函数稳定性参数的三种状态

  • IMMUTABLE:函数在plan时执行且只执行一次。在 select 后面调用序列只会生成多个相同的值;在 where 后面调用序列只会生成多个相同的值
  • STABLE:函数在execute时执行。在 select 后面调用序列会生成多个不同的值;在 where 后面调用序列只会生成多个相同的值
  • VOLATILE:函数在execute时执行。在 select 后面调用序列会生成多个不同的值;在 where 后面调用序列会生成多个不同的值。默认值
函数稳定性参数执行时刻SELECT后调用序列WHERE后调用
IMMUTABLEPLAN生成多个相同的值生成多个相同的值
STABLEEXECUTE生成多个不同的值生成多个相同的值
VOLATILEEXECUTE生成多个不同的值生成多个不同的值默认值

稳定性:immutable > stable > volatile
⚠️注意:序列无法回滚

下面分别演示在事务里、在同一条SQL里和在where后调用这3种状态的不同表现

构造测试环境

-- 查看nextval的函数定义10:10:42pg14@testdb=# \sf nextvalCREATEORREPLACEFUNCTIONpg_catalog.nextval(regclass)RETURNSbigintLANGUAGEinternal STRICTAS$function$nextval_oid$function$-- 创建自定义测试函数test_nextvalCREATEORREPLACEFUNCTIONtest_nextval(regclass)RETURNSbigintLANGUAGEinternal STRICTAS$function$nextval_oid$function$;-- 创建测试序列createsequence test_sequence;

在事务里调用

行为一致,没有差别

alterfunctiontest_nextval(regclass)immutable;-- 事务里调用begin;selecttest_nextval('test_sequence'),test_nextval('test_sequence');rollback;alterfunctiontest_nextval(regclass)stable;alterfunctiontest_nextval(regclass)volatile;


同一条SQL里调用

指定immutable的函数执行计划的计划器在解析sql并执行的时不管有多少条记录,只会执行一次

alterfunctiontest_nextval(regclass)immutable;-- 同一条SQL里调用selecttest_nextval('test_sequence'::regclass)fromgenerate_series(1,3);alterfunctiontest_nextval(regclass)stable;alterfunctiontest_nextval(regclass)volatile;

WHERE后调用

放在 WHERE 后调用,指定immutablestable的函数只执行一次,默认的volatile会执行多次

selectcurrval('test_sequence');alterfunctiontest_nextval(regclass)immutable;-- where后调用select*from(selectgenerate_series(1,5))astempwheretest_nextval('test_sequence')=17;alterfunctiontest_nextval(regclass)stable;alterfunctiontest_nextval(regclass)volatile;


发现了一个前沿巨牛的宝藏人工智能学习网站,通俗易懂,风趣幽默,忍不住给大家分享一下。戳一下跳转到学习。

http://www.jsqmd.com/news/985058/

相关文章:

  • 中石化加油卡余额闲置,正规流转平台怎么挑选 - 京卡收卡券回收
  • 终极Voyager指南:5个技巧掌握Laravel管理后台开发
  • cann/sip列方向逐点乘算子
  • 波形护拦板厂家选择哪家:五步科学决策流程与四家候选厂商实测 - 品牌2026
  • NPU与CPU部署对比:FinguAI-Chat-v1-openmind性能优化终极指南
  • 长春重疾险确诊即赔是真的吗?李晓伟律师:条款里藏着你不知道的门槛 - 行路心安
  • GitHubDaily实战指南:如何高效挖掘全球开源宝藏提升开发技能
  • 兰州黄金回收实测 六大合规门店横评 - 余生黄金回收
  • Origin 2024 进行语言切换后仍然显示为英文
  • 2026苏州黄金回收行业新规解读 靠谱变现机构推荐 - 奢侈品回收测评
  • 2026年6月临沂黄金市场最新动态与买卖回收全攻略 - 润富黄金回收
  • 终极指南:如何在Neovim中配置nvim-jdtls实现高效Java开发
  • 黄金大降急出手?收的顶回收价格仅比大盘低 3 出手不踩坑 - 奢侈品回收测评
  • 南昌黄金行情解读与变现时机把握 - 润富黄金回收
  • linux 内存初始化过程
  • 为什么选择Flask-Sockets?解析这款WebSockets扩展的核心优势与适用场景
  • 2026年天津必吃海鲜餐厅深度横评:滨江道本地人私藏榜单与选购避坑指南 - 精选优质企业推荐官
  • serde_with深度解析:掌握DisplayFromStr和DurationSeconds转换器
  • 2026手把手教你用手机APP做无水印证件照,免费制作方法全攻略 - 办公小帮手
  • 天津全案设计公司推荐:2026年改善型业主都在对比的5家 - GrowthUME
  • 蚂蚁搬家2026 兰州居家厂区多场景搬运服务商综合实力实地梳理汇总 - 深度智识库
  • Mantra v3.0全面解析:为什么它是开发者必备的API密钥泄露防护工具
  • 2026年天津出国读研哪家好:五家优选品牌深度解析 - 科技焦点
  • 2026股权管理咨询盘点:值得关注的专业服务商 - 远大方略管理咨询
  • 基于微信小程序实现家庭事务管理系统【附项目源码+论文说明】
  • AgOpenGPS开发指南:C WinForms实现农业导航系统
  • 2026精密行星换向器厂家推荐:国产进口替代品牌实力解析 - 热点速览
  • imv键盘快捷键大全:掌握高效图像浏览的秘诀
  • 2026 年赤峰装修公司真实口碑排名:综合实力靠谱装企全解析 - 装修新知
  • 终极指南:在64位Windows上无缝运行16位应用程序的完整解决方案