Добавить между двумя тегами HTML в таблице Postgres - PullRequest
0 голосов
/ 31 октября 2018

Postgres таблица с именем postgrestable :

ID    NAME    HTML
1     FRONT   <map> 
              <entry> test </entry>
              </map>

Как мне создать запрос на обновление, который добавляет новый <entry></entry> между тегами <map>. Таблица должна быть обновлена ​​до этой формы:

ID    NAME    HTML
1     FRONT   <map> 
              <entry> test </entry>
              <entry> secondentry </entry>
              </map>

Я пытался использовать REGEXP_REPLACE между тегами, но при этом удаляются все записи между тегами <map> и вставляется обновленная запись. Любая другая идея?

1 Ответ

0 голосов
/ 31 октября 2018

демо: дБ <> скрипка

SELECT 
     regexp_replace(xml, match, match || '<entry>secondentry</entry>')
FROM (
    SELECT
        xml,
        (regexp_matches(xml,'^<map>(.*)</map>$'))[1] as match
    FROM (
        SELECT '<map><entry>test</entry></map>' as xml
    ) s
) s

Используя свой путь с regexp_replace:

  1. regexp_matches дает полное содержание <map>
  2. regexp_replace заменяет все содержимое <map> его содержимым И новым.

Редактировать : Все ОБНОВЛЕНИЕ будет выглядеть так:

UPDATE postgrestable
SET html =
(
    SELECT 
        regexp_replace(xml, match, match || '<entry>secondentry</entry>')
    FROM (
        SELECT
            xml,
            (regexp_matches(xml,'^<map>(.*)</map>$'))[1] as match
        FROM (
            SELECT '<map><entry>test</entry></map>' as xml
        ) s
    ) s
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...