postgresql - 如何检查函数是否不可变?
问题描述
我在 PostgreSQL 文档中没有找到关于translate()
函数分类的任何信息。它被归类为不可变函数吗?
解决方案
查询系统目录pg_proc
:
provolatile
告诉函数的结果是仅取决于其输入参数,还是受外部因素的影响。i表示“不可变”函数,它总是为相同的输入提供相同的结果。它是“稳定”函数的 s,其结果(对于固定输入)在一次扫描中不会改变。v表示“易失”函数,其结果可能随时变化。
select proname, pronamespace::regnamespace, provolatile
from pg_proc
where proname = 'translate'
proname | pronamespace | provolatile
-----------+--------------+-------------
translate | pg_catalog | i
(1 row)
或者,使用该功能pg_get_functiondef():
select pg_get_functiondef('pg_catalog.translate'::regproc)
pg_get_functiondef
-------------------------------------------------------------------
CREATE OR REPLACE FUNCTION pg_catalog.translate(text, text, text)+
RETURNS text +
LANGUAGE internal +
IMMUTABLE STRICT +
AS $function$translate$function$ +
(1 row)
推荐阅读
- mysql - 如何提交和回滚命令在更新 MySQL 中的记录表时起作用?
- swift - 创建节点集的性能问题
- r - R 关于插槽和数据类的混淆
- android-studio - 小部件未显示在 Stack 上,并且 InkResponse 上没有墨水效果
- vue.js - 如何在 Vue.js 方法函数中设置默认参数值?
- typescript - Testcafe 找不到包含在迭代器中的测试
- javascript - 单击时文本区域中的光标位置
- java - java - 多次绑定相同的pdf时如何减小输出pdf的大小
- javascript - 如何在 Youtube 上记住用户在音频时间线上的点?
- python - histogram2d 和 pcolormesh 的对齐问题