首页 > 解决方案 > 使用 Objection.js 插入一组 UUID

问题描述

我正在尝试将新行插入到表中,其中列定义为数组或 UUID:

alter table medias add column "order" uuid[];

我正在使用 Objection.js ORM 并尝试执行以下查询:

const order = [
  'BFAD6B0D-D3E6-4EB3-B3AB-108244A5DD7F'
]

Medias
  .query()
  .insert({
    order: lit(order.map(id => lit(id).castType('uuid'))).castArray()
  })

但是查询格式不正确,因此不会执行:

INSERT INTO xxx ("order")
    VALUES (ARRAY [
      {"_value":"BFAD6B0D-D3E6-4EB3-B3AB-108244A5DD7F","_cast":"uuid","_toJson":false,"_toArray":false}
    ])

可以看出,查询包含LiteralBuilder对象的 JSON 字符串化表示,而不是 SQL 语法理解为类型转换的东西。

如果我跳过转换单个 UUID 字符串而只是将整个列转换为一个数组,那么 Postgres 会拒绝查询,因为该列是类型uuid[],但我试图将该列插入为text[].

如何使用 Objection.js ORM 格式化此查询?

我的目标是保持列定义不变,并能够使用 Objection.js 通过其 API 或通过原始查询插入 Postgres 的 UUID 数组。如果目前使用异议无法做到这一点,作为最后的手段,我愿意将列重新定义为text[],但我想确保我真的没有其他选择。

标签: sqlnode.jspostgresqlobjection.js

解决方案


推荐阅读