DRYな備忘録

Don't Repeat Yourself.

【psql】ERROR: operator does not exist: character varying = uuid

問題

以下のクエリを実行時に掲題のエラーが出る

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 veryinguuid= で比較する演算子はないよ、とのこと。スキーマを確認する

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な備忘録