CakePHPでDBはPostgreSQLのサイトがある。
そちらを移転作業したときに起きた問題
動作チェック中に下記のエラーが発生
1 2 |
Query failed: ERROR: operator does not exist: date ~~ unknown HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. |
HINTから情報を検索するとPostgreSQLのバージョンで検索(Where)のキャスト(型)のチェックが厳密化されたようです。
今回はPostgreSQL7.4.23 → 9.2.10
厳密化は8.3からのようです。
キャストの厳密化とは検索するときにフィールドの型を厳密にチェックするようです。
今までのバージョンは型を自動で変換してくれていたようですが、8.3からはそれを行わないとのこと
1 2 3 4 |
WHERE field_int = '1' // int型に文字列を投げるとか WHERE field_text = 1// text型に数値をなげるとか |
それらがNGとのこと
私のプログラムのエラーはdate型にLIKE検索をしているのがNGでした。
対策としてはFunctionとCastを作成してそれで型の変換をさせる方法があるようですが、
次の移転時にまた困るような気がしたので、今回はプログラム側の修正を行いました。
(プログラムの修正箇所が少なかったため)
CakePHPを使っているのですが下記の修正ではエラーでした。
array(“date::text”=>”2017-11%”)
ということで、ちゃんと関数で変換します。
1 |
array("to_char(date, 'yyyy-mm')"=>"2017-11") |
エラーなく検索結果が返ってきたらOK