いつの間にか postgresql の型のチェックが厳しくなっていました。
症状
クエリ
以下の SQL を実行したところエラーになりました。
select {{id}} from {{table}} where {{id}}=123
エラー
ERROR: operator does not exist: character varying = integer LINE 1: ...ect {{id}} from {{table}} where {{id}}=123; HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
HINT から情報を検索すると PostgreSQL のバージョンで検索(Where)のキャスト(型)のチェックが厳密化されたようです。
調査
厳密化は v8.3 からみたいでした。これまでは型を自動で変換してくれていたようです。
エラーになる場合
int 型に文字列で検索
文字列で定義したフィールドに数値で検索をかけるとエラーになります。
where field_text = 123
text 型に数値で検索
数値で定義したフィールドに文字列で検索をかけるとエラーになります。
where field_int = '123'