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




