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

恢复PostgreSQL Schema时遭遇语法错误,请求技术支持

PostgreSQL函数创建SQL语法错误排查与解决

问题场景

导出的Repo Dump包含如下创建函数的SQL代码:

--
-- Name: add_em(integer, integer); Type: FUNCTION; Schema: public; Owner: developer
--
CREATE FUNCTION public.add_em(x integer, y integer) RETURNS integer LANGUAGE sql AS $ $
SELECT
    x + y;

$ $;

ALTER FUNCTION public.add_em(x integer, y integer) OWNER TO developer;

执行psql -f命令恢复数据库时,出现如下错误:

psql:lib/scripts/repo/structure:87: ERROR: syntax error at or near "$"
LINE 1: ...em(x integer, y integer) RETURNS integer LANGUAGE sql AS $ $

错误原因

PostgreSQL的**美元引号(Dollar Quoting)**语法要求,分界符的$符号之间不能有空格。原代码里的$ $(两个$中间有空格)不符合语法规范,数据库无法正确识别函数体的起始和结束标记,因此抛出语法错误。

修复方案

将SQL代码中的$ $替换为无空格的$$即可,修复后的代码如下:

--
-- Name: add_em(integer, integer); Type: FUNCTION; Schema: public; Owner: developer
--
CREATE FUNCTION public.add_em(x integer, y integer) RETURNS integer LANGUAGE sql AS $$
SELECT
    x + y;

$$;

ALTER FUNCTION public.add_em(x integer, y integer) OWNER TO developer;

如果需要避免函数体内部的$$冲突,也可以给美元引号添加自定义标签,比如$add_em_func$,示例如下:

CREATE FUNCTION public.add_em(x integer, y integer) RETURNS integer LANGUAGE sql AS $add_em_func$
SELECT
    x + y;

$add_em_func$;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:09:55