在 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
提供的评论,我想将此问题标记为已解决
我有以下简单的(为简洁起见删减)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
提供的评论,我想将此问题标记为已解决