如何检查函数是否不可变?

Rod*_*igo 4 postgresql

我在 PostgreSQL 文档中没有找到任何关于translate()函数分类的信息。它被归类为不可变函数吗?

kli*_*lin 7

查询系统目录pg_proc

provolatile告诉函数的结果是仅取决于其输入参数,还是受外部因素的影响。这是为“不可改变”的功能,它总是产生相同的结果对于相同的输入。它是小号为“稳定的”功能,其结果(对于固定输入)不扫描内变化。这是v的“善变”的功能,其结果可能会随时改变。

select proname, pronamespace::regnamespace, provolatile
from pg_proc
where proname = 'translate'

  proname  | pronamespace | provolatile 
-----------+--------------+-------------
 translate | pg_catalog   | i
(1 row) 
Run Code Online (Sandbox Code Playgroud)

或者,使用函数 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)
Run Code Online (Sandbox Code Playgroud)