Hasura中创建PostgreSQL触发器函数时INSERT INTO报语法错误求助
问题排查与解决方案
你的触发器函数本身语法没有错误,错误根源来自换行符转义和Hasura执行器的解析逻辑:
核心原因
你提交的SQL代码里携带了Windows系统的换行标识\r(回车符),从数据库日志可以看到每一行语句末尾都带了\r字符,PostgreSQL的SQL解析器会把这个未被正确转义的字符识别为非法的\开头语法,因此抛出syntax error at or near "\"的报错。
仅当函数包含INSERT语句时才触发报错的原因是:INSERT语句处于函数体的中间位置,异常的\r字符刚好落在语法解析的关键节点,触发行级语法校验规则,没有INSERT的短函数不会触发该类解析异常。
修复步骤
- 先将你写的SQL代码复制到纯文本编辑器(如VS Code、Sublime Text),将编辑器右下角的换行符格式从
CRLF(Windows格式)切换为LF(Unix格式),清除所有冗余的\r字符 - 打开Hasura的SQL执行控制台,执行前取消勾选「Use prepared statements(使用预编译语句)」选项,该选项在处理多行PL/pgSQL代码时极易出现特殊字符转义异常
- 将修改换行符后的代码复制到控制台执行即可完成函数创建
内容的提问来源于stack exchange,提问作者doh
相关产品推荐
相关产品推荐

