Исправление функций, возвращающих множество, в UPDATE недопустимо - PullRequest
0 голосов
/ 02 апреля 2020

После обновления до Postgres 12 оператора

update temprid set
ContactFirstName =unnest(xpath(
     '/E-Document/Document/DocumentParties/BuyerParty/ContactData/ContactFirstName/text()',x))::text,
yhik =unnest(xpath(
     '/E-Document/Document/DocumentItem/ItemEntry/BaseUnit/text()',x))::text
     from t

выдает ошибку

функции возврата в набор недопустимы в UPDATE

How чтобы исправить это ? В Postgres 9.1 это сработало. Я читаю подобные ответы здесь, но они рекомендуют полностью переписать утверждение. Может быть, есть просто изменение, которое заставляет этот оператор работать?

Результат должен быть при любом значении выражения xpath в случае, если xpath возвращает несколько значений

Обновление

Я пытался в соответствии с ответом

update temprid set
ContactFirstName =xpath(
     '/E-Document/Document/DocumentParties/BuyerParty/ContactData/ContactFirstName/text()',x)[1]::text

Но получил ошибку

ERROR:  syntax error at or near "["
LINE 3: .../BuyerParty/ContactData/ContactFirstName/text()',x)[1]::text

1 Ответ

1 голос
/ 02 апреля 2020

Просто замените

SET col = unnest(array_value)

на

SET col = array_value[1]

В вашем случае вы должны использовать дополнительную пару скобок, потому что array_value является выражением:

SET ContactFirstName =
    (xpath(
        '/E-Document/Document/DocumentParties/BuyerParty/ContactData/ContactFirstName/text()',
        x)
    )[1]
...