Re: BUG #18929: After the view is created, executed query against the view definition, reported syntax error.

Heikki Linnakangas <hlinnaka@iki.fi>

From: Heikki Linnakangas <hlinnaka@iki.fi>
To: 707330139@qq.com, pgsql-bugs@lists.postgresql.org, PG Bug reporting form <noreply@postgresql.org>
Date: 2025-05-15T14:41:42Z
Lists: pgsql-bugs

Attachments

On 15/05/2025 07:04, PG Bug reporting form wrote:
> postgres=#  \d+ limit_thousand_v_3
>                        View "public.limit_thousand_v_3"
>    Column  |  Type   | Collation | Nullable | Default | Storage | Description
> ----------+---------+-----------+----------+---------+---------+-------------
>   thousand | integer |           |          |         | plain   |
> View definition:
>   SELECT thousand
>     FROM onek
>    WHERE thousand < 995
>    ORDER BY thousand
>   FETCH FIRST NULL::bigint + 1::bigint ROWS WITH TIES;
> postgres=# SELECT thousand
> postgres-#    FROM onek
> postgres-#   WHERE thousand < 995
> postgres-#   ORDER BY thousand
> postgres-#  FETCH FIRST NULL::bigint + 1::bigint ROWS WITH TIES;
> ERROR:  syntax error at or near "::"
> LINE 5:  FETCH FIRST NULL::bigint + 1::bigint ROWS WITH TIES;
>                           ^

Agreed that's a bug. Attached is a simple patch to add parens to all 
deparsed FETCH FIRST n ROWS WITH TIES expressions.

It would be nice to skip the parens for simple literals, but 
unfortunately it's non-trivial to distinguish Consts that are printed as 
simple literals from more complicated cases that are printed as 
typecasts, like '123'::bigint. XMLEXISTS is another expression type that 
takes a 'c_expr' in the the grammar, and it also just always adds the 
parens.

I'll commit this fix, unless someone comes up with something more 
sophisticated.

-- 
Heikki Linnakangas
Neon (https://neon.tech)

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Fix cross-version upgrade test failure

  2. Fix deparsing FETCH FIRST <expr> ROWS WITH TIES