Вставьте массив UUID с помощью Objection.js - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь вставить новую строку в таблицу со столбцом, определенным как массив или 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}
    ])

Как видно, запрос содержит строковое представление JSON объекта LiteralBuilder, а не то, чтосинтаксис SQL понимается как приведение типа.

Если я пропущу приведение отдельных строк UUID и просто приведу весь столбец в массив, то Postgres отклонит запрос, поскольку столбец имеет тип uuid[], но я пытаюсьвставить столбец как text[].

Как мне отформатировать этот запрос с помощью Objection.js ORM?

Моя цель - сохранить определение столбцанетронутым и иметь возможность вставлять массив UUID Postgres, используя Objection.js, либо через его API, либо через необработанный запрос.Если в настоящее время это невозможно с помощью функции «Возражение», я хотел бы, в крайнем случае, переопределить столбец как text[], но я хотел бы убедиться, что у меня действительно нет другого варианта.

...