You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PostgreSQL函数插入字符串时报语法错误的问题求助

解决PostgreSQL函数中字符串插入的语法错误问题

嘿,这个问题我之前踩过坑!你碰到的syntax error at or near "danilo"错误,核心原因是函数体的单引号和字符串值的单引号冲突了

问题根源拆解

你用单引号'把整个SQL语句包裹起来作为函数体,当PostgreSQL解析到VALUES ('danilo', 12)里的第一个'时,会误以为这是函数体的结束标记,剩下的danilo', 12)就成了无效语法,自然报错。而只插入year字段时不需要单引号,不会触发这个冲突,所以能正常执行。

两种可行的解决方案

1. 用双单引号转义内部字符串

PostgreSQL里,在单引号包裹的内容中,要表示一个单引号需要写两个连续的单引号(反斜杠转义默认是关闭的,所以用它没用)。修改后的函数写法如下:

create function add() returns void as '
 insert into people(name, year) VALUES (''danilo'', 12)
' LANGUAGE SQL;

2. 使用美元引号(更推荐)

这是PostgreSQL专门用来规避单引号转义麻烦的语法,用$$(也可以自定义标记,比如$insert_func$)包裹函数体,内部的单引号不需要任何转义,可读性拉满:

create function add() returns void as $$
 insert into people(name, year) VALUES ('danilo', 12)
$$ LANGUAGE SQL;

随便选一种写法试下,都能解决这个语法问题~

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

火山引擎 最新活动