私は PostgreSQL 9.4 とすばらしい JSONB フィールド タイプを使用しています。ドキュメント内のフィールドに対してクエリを実行しようとしています。以下はpsql CLIで機能します
SELECT id FROM program WHERE document -> 'dept' ? 'CS'
Scala アプリで同じクエリを実行しようとすると、以下のエラーが発生します。私は Play フレームワークと Anorm を使用しているので、クエリは次のようになります。
SQL(s"SELECT id FROM program WHERE document -> 'dept' ? {dept}")
.on('dept -> "CS")
....
SQLException: : パラメーター 5 に値が指定されていません。 (SimpleParameterList.java:223)
(私の実際のクエリでは、より多くのパラメーターがあります)
パラメーターを型にキャストjsonb
し、演算子を使用して@>
包含をチェックすることで、これを回避できます。
SQL(s"SELECT id FROM program WHERE document -> 'dept' @> {dept}::jsonb")
.on('dept -> "CS")
....
私は周りの仕事にあまり熱心ではありません。キャストにパフォーマンスのペナルティがあるかどうかはわかりませんが、それは余分なタイピングであり、明白ではありません。
他にできることはありますか?