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

PostgreSQL函数创建报错:ERROR: syntax error at or near "$func$"问题排查

问题原因与解决方法

你的函数存在两个问题,其中直接触发语法错误的是:

  • 你声明函数使用LANGUAGE sql,但函数体却用了PL/pgSQL专属的BEGIN...END块结构,SQL语言的函数不支持这种语法,因此引发语法报错。

此外还有一个潜在的类型错误:date_trunc函数的第二个参数需要是timestamptz(或兼容的时间类型),直接传入text类型会导致执行时类型不匹配错误,需要补充类型转换。

两种修正方案

方案1:改用PL/pgSQL语言

将LANGUAGE sql改为LANGUAGE plpgsql,同时补充类型转换:

CREATE OR REPLACE FUNCTION to_tstz_immutable(t text)
  RETURNS timestamptz
  LANGUAGE plpgsql IMMUTABLE STRICT PARALLEL SAFE
$func$
BEGIN 
    RETURN date_trunc('hour', t::timestamptz);
END
$func$;

方案2:保留SQL语言简化函数体

SQL语言的函数不需要BEGIN...END,直接写查询表达式即可,同时补充类型转换:

CREATE OR REPLACE FUNCTION to_tstz_immutable(t text)
  RETURNS timestamptz
  LANGUAGE sql IMMUTABLE STRICT PARALLEL SAFE
$func$
    SELECT date_trunc('hour', t::timestamptz);
$func$;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 15:02:04