問題
以下のクエリを実行時に掲題のエラーが出る
SELECT * FROM logs WHERE job_id IN (SELECT DISTINCT id FROM jobs WHERE jobs.active = true) ;
ERROR: operator does not exist: character varying = uuid LINE 1: SELECT * FROM logs WHERE job_id IN (SELECT DISTINCT id FROM j... ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
エラーメッセージ嫁
はい
ERROR: operator does not exists: character varying = uuid
character verying
を uuid
を =
で比較する演算子はないよ、とのこと。スキーマを確認する
mydb=# \d logs -- logs.job_idはtype character varying(255) (varchar(255)) mydb=# \d jobs -- jobs.idはtype uuid
なるほど
解決
HINTを読もう
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
明示的なキャストをすればいけるらしい
SELECT * FROM logs WHERE job_id::uuid IN (SELECT DISTINCT id FROM jobs WHERE jobs.active = true) ;
いけた
(まあ、根本解決は、テーブルスキーマ直すことでしょうな)
DRYな備忘録