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 @ 2022-08-05 14:52  狂神314  阅读(268)  评论(0编辑  收藏  举报