当前位置: 首页 > 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.rkmt.cn/news/1496805.html

相关文章:

  • 中石化加油卡余额闲置,正规流转平台怎么挑选 - 京卡收卡券回收
  • 波形护拦板厂家选择哪家:五步科学决策流程与四家候选厂商实测 - 品牌2026
  • 终极指南:如何在Neovim中配置nvim-jdtls实现高效Java开发
  • NPU与CPU部署对比:FinguAI-Chat-v1-openmind性能优化终极指南
  • 2026年天津必吃海鲜餐厅深度横评:滨江道本地人私藏榜单与选购避坑指南 - 精选优质企业推荐官
  • 蚂蚁搬家2026 兰州居家厂区多场景搬运服务商综合实力实地梳理汇总 - 深度智识库
  • 为什么选择Flask-Sockets?解析这款WebSockets扩展的核心优势与适用场景
  • Mantra v3.0全面解析:为什么它是开发者必备的API密钥泄露防护工具
  • 2026年天津出国读研哪家好:五家优选品牌深度解析 - 科技焦点
  • 防伪溯源哪家实力强?十大标杆案例见证全链路数字化防护硬实力 - 奔跑123
  • 基于微信小程序实现医院挂号系统【附项目源码+论文说明】
  • 2026年上海装修公司深度横评:从闵行到松江,如何找到零增项的高端设计装企 - 年度推荐企业名录
  • 西北工业大学考研辅导班正规机构,全维度榜单推荐 - 推荐评测师
  • 2026年5月免费急救:论文AI率爆红别慌!DeepSeek+Kimi润色指令大全(附实测工具) - 降AI实验室
  • 开发者必看:基于Open LLaMA 7B V2构建医疗AI应用的10个技巧
  • 合肥黄金回收怎么选?同步大盘价无隐形手续费 - 禹竞
  • 【MATLAB例程】多无人机,集群多角度打击目标,时间与角度约束下的协同攻击算法,附下载链接
  • 塑化企业必看!百度爱采购代运营选谁?企优托一网推徐欢(徐仙)深耕行业出实效 - 新闻快传
  • 佛山黄金回收深度测评,五大品牌优势与适用人群 - 奢侈品交易观察员
  • 2026 宿州厨卫屋面地下室漏水瓷砖空鼓测评:吉修匠 99.8 分五星榜首 - 吉修匠
  • 员工管理-批量删除和修改、全局异常处理器和员工信息统计Ecahrs-数据转换格式
  • 【精品资料鉴赏】IPD与CBB研发技术管理体系
  • 广州医科大学考研辅导班正规机构,全维度榜单推荐 - 推荐评测师
  • 昇腾CANN Transformer算子库ops-transformer深度技术剖析:从FlashAttention内核到MoE稀疏计算的完整优化指南
  • 启点创新游乐场多商户分账管理系统,欢乐世界游乐园票务管理系统
  • 贵州纯玩包车避坑全解析:十大正规旅行社测评,贵阳美途说稳居榜首 - 美途说
  • ArchLinux Wayland 安裝Sway
  • 服务器推荐:从千卡智算集群到温水水冷,联想如何缩短大模型训练周期? - 资讯纵览
  • 武威市2026年黄金回收+白银回收+铂金回收+彩金回收品牌门店推荐及联系方式+地址+电话+靠谱店铺指南 - 盛世金银回收
  • [LC优选算法#2] 滑动窗口 | 长度最小的子数组 | 无重复字符的最长子串 | 最大连续1的个数