BUG #19589: JSON_QUERY rejects domain-over-bytea input when using FORMAT JSON ENCODING UTF8.

Started by PG Bug reporting form4 days ago2 messagesbugs
Jump to latest
#1PG Bug reporting form
noreply@postgresql.org

The following bug has been logged on the website:

Bug reference: 19589
Logged by: Yuxiao Guo
Email address: dllggyx@outlook.com
PostgreSQL version: 18.4
Operating system: Ubuntu 20.04 x86-64, docker image postgres:18.4
Description:

Query A and Query B are equivalent, but while JSON_QUERY(... FORMAT JSON
ENCODING UTF8 ...) accepts a direct bytea input, it incorrectly rejects a
domain-over-bytea input with the error JSON ENCODING clause is only allowed
for bytea input type.

PoC:

```sql
CREATE DOMAIN d_json_bytea AS bytea;

-- Query A
SELECT JSON_QUERY(convert_to(txt, 'utf8') FORMAT JSON ENCODING UTF8, '$') AS
j
FROM (VALUES ('[1,2]')) AS src(txt);

-- Query B
SELECT JSON_QUERY(b FORMAT JSON ENCODING UTF8, '$') AS j
FROM (
SELECT convert_to(txt, 'utf8')::d_json_bytea AS b
FROM (
SELECT txt
FROM (
SELECT '[1,2]'::text AS txt
UNION ALL
SELECT '[9,9]'::text WHERE false
) AS u
WHERE txt LIKE '[%'
) AS filtered
) AS typed;

```

Result of Query A:
j
--------
[1, 2]
(1 row)

Result of Query B:
ERROR: JSON ENCODING clause is only allowed for bytea input type
LINE 1: SELECT JSON_QUERY(b FORMAT JSON ENCODING UTF8, '$') AS j

#2Tristan Partin
tristan@partin.io
In reply to: PG Bug reporting form (#1)
Re: BUG #19589: JSON_QUERY rejects domain-over-bytea input when using FORMAT JSON ENCODING UTF8.

On Thu Jul 30, 2026 at 1:40 PM CDT, PG Bug reporting form wrote:

The following bug has been logged on the website:

Bug reference: 19589
Logged by: Yuxiao Guo
Email address: dllggyx@outlook.com
PostgreSQL version: 18.4
Operating system: Ubuntu 20.04 x86-64, docker image postgres:18.4
Description:

Query A and Query B are equivalent, but while JSON_QUERY(... FORMAT JSON
ENCODING UTF8 ...) accepts a direct bytea input, it incorrectly rejects a
domain-over-bytea input with the error JSON ENCODING clause is only allowed
for bytea input type.

PoC:

```sql
CREATE DOMAIN d_json_bytea AS bytea;

-- Query A
SELECT JSON_QUERY(convert_to(txt, 'utf8') FORMAT JSON ENCODING UTF8, '$') AS
j
FROM (VALUES ('[1,2]')) AS src(txt);

-- Query B
SELECT JSON_QUERY(b FORMAT JSON ENCODING UTF8, '$') AS j
FROM (
SELECT convert_to(txt, 'utf8')::d_json_bytea AS b
FROM (
SELECT txt
FROM (
SELECT '[1,2]'::text AS txt
UNION ALL
SELECT '[9,9]'::text WHERE false
) AS u
WHERE txt LIKE '[%'
) AS filtered
) AS typed;

```

Result of Query A:
j
--------
[1, 2]
(1 row)

Result of Query B:
ERROR: JSON ENCODING clause is only allowed for bytea input type
LINE 1: SELECT JSON_QUERY(b FORMAT JSON ENCODING UTF8, '$') AS j

Thanks for the report. I am currently taking a look at this. I have
reproduced the issue and am working on a fix.

--
Tristan Partin
PostgreSQL Contributors Team
AWS (https://aws.amazon.com)