Node postgres - обновляет несколько строк за один вызов из массива объектов - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть массив объектов, которые я хочу использовать для обновления postgres за один вызов, я видел несколько ответов, включая этот пример:

update portfolios p
set votes = s.votes
from (
    select (a->>'votes')::int as votes, (a->>'id')::int as id
    from (
        select jsonb_array_elements(a) as a
        from (values (($1)::jsonb)) s(a)
    ) s
) s
where p.id = s.id

Я попробовал это, и это работает:

    query = `
update ticket_custom_field t
set value = s.value
from (
    select (a->>'value')::text as value, (a->>'custom_field_id')::int as custom_field_id
    from (
        select jsonb_array_elements(a) as a
        from (values ('[{"value": "Y1", "custom_field_id": 1}, {"value": "Y2", "custom_field_id": 1}]'::jsonb)) s(a)
    ) s
) s
where t.custom_field_id = s.custom_field_id`;

Но извлечение параметра не по какой-то причине:

    query = `
update ticket_custom_field t
set value = s.value
from (
    select (a->>'value')::text as value, (a->>'custom_field_id')::int as custom_field_id
    from (
        select jsonb_array_elements(a) as a
        from (values ($1::jsonb)) s(a)
    ) s
) s
where t.custom_field_id = s.custom_field_id`;


let p = JSON.stringify([{
    "value": "X",
    "custom_field_id": 1
}, {
    "value": "XX",
    "custom_field_id": 1,
    "fake": 333
}]);

...

result = await client.query(query, p);

Ошибка: «Значения запроса должны быть массивом». Я пытался с и без stringify, но не повезло, что мне здесь не хватает?

...