ものづくりのブログ

うちのネコを題材にしたものづくりができたらいいなと思っていろいろ奮闘してます。

postgresql の where 句で型の指定方法が悪くてエラーが出た

いつの間にか 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'