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

如何读取PostgreSQL标准SQL函数的函数体?

解决PostgreSQL 14新语法函数体读取问题

这不是bug,是pg_get_expr的设计限制导致的。pg_get_expr只能处理表达式类型的语法节点,但PostgreSQL 14新语法创建的函数,其函数体存储在pg_proc.prosqlbody中,属于完整的SQL语句或语句块,并非表达式范畴,所以调用pg_get_expr会返回NULL或抛出“input is a query, not an expression”的错误。

正确的替代方法是使用PostgreSQL 14新增的pg_get_sql_body()函数——它就是专门为解析prosqlbody中的pg_node_tree类型数据设计的,能直接返回可读的纯净函数体SQL。

示例查询语句:

-- 获取指定函数的函数体内容
SELECT pg_get_sql_body(p.prosqlbody) AS function_body
FROM pg_proc p
WHERE p.proname = '你的函数名'
  -- 可选:加上函数签名过滤,避免同名函数冲突
  AND pg_get_function_identity(p.oid) = '你的函数签名';

这个方法比用pg_get_functiondef获取完整创建语句再截取函数体要健壮得多,无需处理字符串解析的各种边缘情况,能直接拿到函数体的原始SQL内容,完全适配你生成数据库间更新脚本的需求——可以直接对比两个数据库中函数的解析结果,精准生成差异更新语句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:38:19