BUG #19486: Regression in SQL-language functions using XML values and IS DOCUMENT

PG Bug reporting form <noreply@postgresql.org>

From: PG Bug reporting form <noreply@postgresql.org>
To: pgsql-bugs@lists.postgresql.org
Cc: a.prototype7@gmail.com
Date: 2026-05-18T07:54:29Z
Lists: pgsql-bugs
The following bug has been logged on the website:

Bug reference:      19486
Logged by:          Artem Zarubin
Email address:      a.prototype7@gmail.com
PostgreSQL version: 18.4
Operating system:   Debian 13
Description:        

Hello, I found a regression in SQL-language functions using XML values and
`IS DOCUMENT`.

  Tested commits:

  bad:  98dd6c2046965e51da015681e81c20109be46d71, PostgreSQL 18.4
  bad:  5107398e6d5ecad96f3d1c0efcfc9aa02b9cdff9, PostgreSQL 19devel
  good: e9e7b66044c9e3dfa76fd1599d5703acd3e4a3f5, parent of 0dca5d68
        PostgreSQL 18devel before SQL-function plan cache changes

  The server was configured with:

    ./configure --enable-tap-tests --enable-debug --enable-cassert
--with-libxml

  SQL-script to reproduce:

  CREATE OR REPLACE FUNCTION xml_to_text_no_inline(pXml xml) RETURNS text
  LANGUAGE sql
  IMMUTABLE
  SET search_path = pg_catalog
  AS $$
  SELECT CASE WHEN pXml IS DOCUMENT
              THEN (xpath('/*/text()', pXml))[1]::text
              ELSE pXml::text
         END;
  $$;

  SELECT xml_to_text_no_inline(XMLPARSE(CONTENT '2019-12-16T00:00:00.000'));

  Expected result:

    2019-12-16T00:00:00.000

  Actual result:

  ERROR:  could not parse XML document
  DETAIL:  line 1: Start tag expected, '<' not found
  2019-12-16T00:00:00.000
  ^
  CONTEXT:  SQL function "xpath" statement 1
  SQL function "xml_to_text_no_inline" statement 1

  ---
  Best regards,
  Artem Zarubin
  Postgres Professional: https://postgrespro.com/





Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. postgres_fdw: Fix deparsing of remote column names in stats import.

  2. pgbench: fix verbose error message corruption with multiple threads

  3. Add GiST and btree sortsupport routines for range types