PostgreSQL创建斐波那契函数报SQL state 42601: $分隔字符串未结束
PostgreSQL plpgsql斐波那契函数$分隔符报错修复方案
你编写的函数语法本身没有问题,报错「$分隔的字符串未结束」的核心原因是数据库没有匹配到与开头$$对应的结束标记,常见触发场景及修复方法如下:
- 执行端未开启多行语句支持
大部分SQL客户端默认按行拆分提交语句,执行到as $$行时就会将不完整的片段发给数据库,找不到配对的结束$$。开启客户端的「整块执行/多行语句支持」配置后,全选整个函数语句提交即可。 - 运行环境不支持美元符引用
部分低版本PostgreSQL或封装的执行环境对$$美元符引用语法支持异常,可以替换为单引号包裹函数体,你当前的函数体内无单引号,无需额外转义,修改后的可执行语句如下:
create or replace function fibonacci(int) returns int as ' declare a int; res int := 0; begin a := $1; if(a = 1 or a = 2) then res :=1; else res := fibonacci(a - 2) + fibonacci(a - 1); end if; return res; end; ' language plpgsql;
- 标记存在异常字符
检查前后两处$$是否为半角英文符号,有没有混入全角符号、不可见空格、注释字符,确保两处标记完全匹配且无多余字符干扰。 - psql命令行变量替换冲突
如果你在psql命令行中执行操作,开启变量自动替换的情况下$会被识别为变量前缀,可先执行\set OFF关闭变量替换,再提交函数创建语句。
内容的提问来源于stack exchange,提问作者Ramon Acosta
相关产品推荐
相关产品推荐

