3

我正在使用 Yesod 的 persistent-postgresql 库,我想执行以下原始查询:

SELECT * FROM utterance WHERE is_target IS NULL ORDER BY RANDOM() LIMIT 1000

选择 1000 个带有 NULL is_target 的随机话语。但是,当我通过以下方式运行代码时,持久性会生成以下 SQL rawSql

SELECT * FROM utterance WHERE is_target IS NULL ORDER BY RANDOM() LIMIT 1000"utterance"."id", "utterance"."message", "utterance"."is_target"

这会在 .postgresql 中生成错误syntax error at or near ""utterance"" at character 77

我究竟做错了什么?

4

2 回答 2

4

我通过使用以下查询解决了这个问题:

SELECT ?? FROM utterance WHERE is_target IS NULL ORDER BY RANDOM() LIMIT 1000
于 2012-10-23T18:33:47.880 回答
2

rawSql 不适用于列通配符,因为它对返回的数据强制执行强类型,因此它正在尝试(并且失败)找出将列名放在哪里。您需要明确列出列名或使用一些“??” 语句中的占位符并在运行时绑定它们,例如,

$ (Entity myType utterance, .... ) -> do ....

如果你不想要强类型,你可能也不想使用 Persistent;这就是它存在的全部原因。

于 2012-10-22T23:52:08.007 回答