You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何封装PostgreSQL的record_out()函数创建IMMUTABLE包装函数

record_out的IMMUTABLE包装实现方案

你在lib/目录下找不到对应库导出是正常的:record_out不属于任何第三方扩展,是PostgreSQL核心内置的函数,符号直接编译在PostgreSQL主程序二进制中,不需要依赖lib/目录下的插件库,参照unaccent的封装逻辑按以下步骤实现即可:

  • 第一步:声明绑定核心C函数的不可变版本
    和unaccent示例中绑定C函数的逻辑一致,只是因为是核心内置函数,语言指定为internal,不需要写第三方库路径:
CREATE OR REPLACE FUNCTION public.immutable_record_out(record)
  RETURNS cstring LANGUAGE internal IMMUTABLE PARALLEL SAFE STRICT AS
'record_out';
  • 第二步:封装为方便业务调用的SQL层函数
    根据你的实际使用场景做类型转换即可,最常用的是将任意行类型记录转为文本输出:
CREATE OR REPLACE FUNCTION public.f_record_out(record)
  RETURNS text LANGUAGE sql IMMUTABLE PARALLEL SAFE STRICT AS
$func$
SELECT public.immutable_record_out($1)::text
$func$;

注意:只有当函数输出完全由入参决定、不受任何会话配置、搜索路径、系统状态影响时,才可以标记为IMMUTABLE。record_out的输出仅和输入的record内容相关,标记为IMMUTABLE是安全的,可以正常用于表达式索引、生成列等场景。

内容的提问来源于stack exchange,提问作者Gili

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 00:27:42