21

我在 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 中的错误消息非常神秘。

4

4 回答 4

67

您尚未提供有关语言/环境的任何详细信息,但无论如何我都会尝试一个疯狂的猜测:

MySQL 的预处理语句本身?用作参数占位符,但 PostgreSQL 使用$1$2。尝试替换?with$1并查看它是否有效:

WHERE address = $1

PostgreSQL 中的错误消息非常神秘。

总的来说,我发现 Postgres 错误消息比竞争产品(咳咳,MySQL,尤其是Oracle)要好,但是在这种情况下,您已经设法使解析器感到困惑,超出了理智。:)

于 2012-10-29T10:32:27.233 回答
7

你正在使用 Go 对吗?

尝试:

db.Query(`SELECT COUNT(*) as N FROM email WHERE address = $1`, email)
于 2012-10-29T10:32:02.120 回答
5

在 golang 中我们使用的查询

  • MySQL 使用 ? 变体
  • PostgreSQL 使用枚举的 $1、$2 等 bindvar 语法
  • SQLite 两者都接受?和 $1 语法
  • Oracle 使用 :name 语法
于 2020-02-08T00:01:50.553 回答
1

就我而言,这是由于使用了 -- 行注释,在该注释中,负责与数据库交互的程序在我的查询的多行中读取为一条巨行。这意味着行注释破坏了查询的其余部分。解决方法是使用 /* 块注释 */ 代替。

于 2020-04-07T22:40:00.170 回答