如何包装 record_out() 函数?

How to wrap record_out() function?

我想创建一个 IMMUTABLE 包装函数,正如 所讨论的那样,但不清楚如何进行。上面的 Whosebug 答案提供了以下示例:

例如,给定:

CREATE OR REPLACE FUNCTION public.immutable_unaccent(regdictionary, text)
  RETURNS text LANGUAGE c IMMUTABLE PARALLEL SAFE STRICT AS
'$libdir/unaccent', 'unaccent_dict';

CREATE OR REPLACE FUNCTION public.f_unaccent(text)
  RETURNS text LANGUAGE sql IMMUTABLE PARALLEL SAFE STRICT AS
$func$
SELECT public.immutable_unaccent(regdictionary 'public.unaccent', )
$func$;

我扫描了 lib/ 中的所有库,据我所知 none 其中有与 record_out() 相关的导出函数。有什么想法吗?

record_out() 函数是内部 built-in 函数。你可以这样得到它的定义:

select pg_get_functiondef('record_out'::regproc);

                    pg_get_functiondef
----------------------------------------------------------
 CREATE OR REPLACE FUNCTION pg_catalog.record_out(record)+
  RETURNS cstring                                        +
  LANGUAGE internal                                      +
  STABLE PARALLEL SAFE STRICT                            +
 AS $function$record_out$function$                       +

我不知道你想要包装功能的目的是什么。仅保留警告,这样的更改可能会带来意想不到的结果。