PostgreSQL中函数的三态

postgresql中每一个函数都有一个易变性分类,可能是 VOLATILE、STABLE或者IMMUTABLE。 如果CREATEFUNCTION命令没有指定一个分类,则默认是VOLATILE。

VOLATILE函数可以做任何事情,包括修改数据库。在使用相同的参数连续调用时, 它能返回不同的结果

STABLE函数不能修改数据库并且被确保对一个语句中 的所有行用给定的相同参数返 回相同的结果

IMMUTABLE函数不能修改数据库并且被确保用相同的参数 永远返回相同的结果

 

我们先来看看vlolatile和stable函数的区别,这两者其实比较好区分:简单来说,使用volatile函数在同一个事务中即使是相同的参数,返回的结果也会不同,而stable函数在同一个事务中多次调用返回的值是固定的,比如说我们常见的now和clock_timestamp函数,这两个函数都是获取当前系统的时间,但是now是stable类型的函数,clock_timestamp是volatile类型的.

 

 

创建函数加上标识,或者alter 函数方式修改。但注意如果是函数索引,设置为immutable,则要考虑正确性。

 

volatile函数在同一个事务中即使是相同的参数,返回的结果也会不同;
stable函数在同一个事务中对于相同的参数,返回的结果也会相同;
immutable函数却是只要给定相同参数,永远返回相同的结果.

posted @   狂神314  阅读(281)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示