Postgres SQL строк в указанном формате XML - PullRequest
1 голос
/ 01 октября 2019

У меня в таблице есть следующие данные

        name    exists
-------------------------
        Green   true
        Purple  false

Мне нужно будет преобразовать эти строки в следующий xml

<Green>YES</Green><Purple>false</Purple>

Я пытался использовать xmlforest, но это возвращает что-то вродеэто.

<name>Green</name><exists>true</exists>
<name>Purple</name><exists>false</exists>

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

Если вам подходит простая генерация строк без какой-либо проверки XML, вам следует воспользоваться решением @ a_horse_with_no_name.

Если вы хотите создавать элементы XML с использованием функций XML PostgreSQL, вам нужнодля генерации динамического SQL с форматированной функцией:

demo: db <> fiddle

CREATE OR REPLACE FUNCTION create_xml(_name text, _val boolean) RETURNS xml
AS $$
DECLARE
    _result xml;
BEGIN
    EXECUTE format('SELECT xmlelement(name %I, %s)', _name, _val::text) INTO _result;

    RETURN _result;
END;
$$ LANGUAGE plpgsql;

Проблема в том, что имя элемента не может быть установлено динамическизапись: Смотрите здесь

0 голосов
/ 01 октября 2019

Для такого простого вывода, вероятно, проще просто объединить значения, используя format()

select format('<%s>%s</%s>', name, exists::text, name)
from the_table;

Единственным недостатком является то, что он не будет правильно экранировать имена, которые не являются допустимыми тегами XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...