3

Yesod の persistent-postgresql ライブラリを使用しており、次の生のクエリを実行したいと考えています。

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

is_target が NULL の 1000 個のランダムな発話を選択します。ただし、永続的にコードを実行すると、次の 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 に答える