我在MySQL和PostgreSQL中都使用了下一个SQL语句,但它在PostgreSQL中失败了
db.Query(`SELECT COUNT(*) as N FROM email WHERE address = ?`, email)
这个错误:
pq: F:"scan.l" M:"syntax error at end of input" S:"ERROR" C:"42601" P:"50" R:"scanner_yyerror" L:"993"
PostgreSQL中的错误消息非常晦涩难懂。
5条答案
按热度按时间3phpmpom1#
你还没有提供关于语言/环境的任何细节,但我还是会尝试一个大胆的猜测:
MySQL的prepared语句本身使用
?
作为参数占位符,但PostgreSQL使用$1
,$2
等。尝试将?
替换为$1
,看看是否有效:PostgreSQL中的错误消息非常隐晦。
总的来说,我发现Postgres的错误消息比竞争产品(啊哈,MySQL和 * 特别是 * Oracle)更好,但在这种情况下,你已经成功地混淆了解析器。
t0ybt7op2#
在golang中,我们使用
brccelvz3#
你用的是Go吧?
尝试:
zwghvu4y4#
在我的例子中,这是由于使用了-- line注解,负责与数据库交互的程序将我的查询的多行都作为一个巨大的行读取。这意味着行注解破坏了查询的其余部分。修复方法是使用/* 块注解 */。
wko9yo5t5#
另一种可能性-检查
IF
、LOOP
等是否缺少END
指令。我在循环中工作了很长时间,以至于我没有意识到我从来没有放入
END LOOP;
。Postgres的消息:
在告诉你某个结构是否从未关闭时是非常没有帮助的。