PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgres JSONb zu XML mit tag_name und tag_value

Aufbauend auf der Lösung von @Georges Martin würde ich keinen lateralen Join und keine Gruppierungsklausel verwenden, sondern nur eine verschachtelte Unterabfrage:

SELECT XMLELEMENT(
  NAME "Company", 
  XMLATTRIBUTES(id AS id, field1 AS field), 
  (SELECT XMLAGG(
    XMLELEMENT(
      NAME "companyTag", 
      XMLATTRIBUTES(
        attr.key AS "tagName", 
        attr.value AS "tagValue"
      )
    )
  ) FROM JSONB_EACH_TEXT(attributes) AS attr)
) FROM comp_emp;