The following bug has been logged on the website:
Bug reference: 15517
Logged by: Mark Drake
Email address: mark.drake@golden-hind.com
PostgreSQL version: 11.1
Operating system: Windows
Description:
postgres=# create table foo(x xml);
CREATE TABLE
postgres=# insert into foo values ('<XYZ>XXX</XYZ>');
INSERT 0 1
postgres=# insert into foo values ('<?xml
version="1.0"?><ABC>123</ABC>'::XML);
INSERT 0 1
postgres=# select x, x::text, JSONB_BUILD_ARRAY(x,x::text) from foo;
x | x |
jsonb_build_array
----------------+-------------------------------------+-------------------------------------------------------------
<XYZ>XXX</XYZ> | <XYZ>XXX</XYZ> | ["<XYZ>XXX</XYZ>",
"<XYZ>XXX</XYZ>"]
<ABC>123</ABC> | <?xml version="1.0"?><ABC>123</ABC> | ["<ABC>123</ABC>",
"<?xml version=\"1.0\"?><ABC>123</ABC>"]
(2 rows)
As can be seen the JSONB_BUILD_ARRAY of x has omitted the declaration. I
would have expected the declaration to be included in the output for column
X.
As can be seen a simple workaround is to generate based on the casting to
text. Not sure how much overhead (if any) this adds.