在 Doobie SQL 更新中使用 UUID

Use UUID in Doobie SQL update

我有以下简单的(为简洁起见删减)Postgres table:

create table users(
  id            uuid NOT NULL,
  year_of_birth smallint NOT NULL
);

在测试中我播种了数据。 当我 运行 以下 SQL 更新以更正 year_of_birth 时,错误意味着我没有正确提供必要的 UUID。

杜比 SQL 我 运行 是:

val id: String = "6ee7a37c-6f58-4c14-a66c-c17083adff81"
val correctYear: Int = 1980

sql"update users set year_of_birth = $correctYear where id = $id".update.run

我已经尝试过在给定的 $id 周围使用和不使用引号,例如另一个版本是:

sql"update users set year_of_birth = $correctYear where id = '$id'".update.run

上面 运行 的错误是:

org.postgresql.util.PSQLException: ERROR: operator does not exist: uuid = character varying
  Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.

两条评论都提供了可行的解决方案。

a_horse_with_no_name 建议使用 cast 虽然 SQL 与其他解决方案相比变得不那么好。

AminMal 建议使用可用的 Doobie implicits,它可以处理 SQL 内的 UUID,从而避免 cast.

所以我将代码更改为以下内容:

import doobie.postgres.implicits._

val id: UUID = UUID.fromString("6ee7a37c-6f58-4c14-a66c-c17083adff81") 

sql"update users set year_of_birth = $correctYear where id = $id".update.run

鉴于 AminMal

提供的评论,我想将此问题标记为已解决