Re: BUG #17225: Query with CTE failed after upgrade Postgres from 11 to 12/13

From: Guillaume Lelarge <guillaume(at)lelarge(dot)info>
To: karllos88(at)gmail(dot)com, PostgreSQL mailing lists <pgsql-bugs(at)lists(dot)postgresql(dot)org>
Subject: Re: BUG #17225: Query with CTE failed after upgrade Postgres from 11 to 12/13
Date: 2021-10-12 20:21:59
Message-ID: CAECtzeWuVDM7nq6pCb2u-dh6preVb_4iBCQtMcc540DYOcFdaw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

Le mar. 12 oct. 2021 à 22:07, PG Bug reporting form <noreply(at)postgresql(dot)org>
a écrit :

> The following bug has been logged on the website:
>
> Bug reference: 17225
> Logged by: Karol K
> Email address: karllos88(at)gmail(dot)com
> PostgreSQL version: 12.0
> Operating system: Debian 11.1
> Description:
>
> After upgrading Postgres I have a weird error with SELECT query.
>
> ERROR: invalid input syntax for type integer: "36-004"
>
> Query works on previous DB version and now doesn't. Query use a lot of CTE
> (To be more specific - 8) and looks like:
>
> WITH ...(),
> last_inspection_info AS (
> SELECT
> sort_column || '<span style="' || color || '" ' || on_click || '>'
> || task_icon || '(' || days_to_next_inspection || ') ' || li.start_::date
> ||
> '</span>' AS last_inspection_info,
> devcid, li.evntid
> FROM last_inspection AS li
> INNER JOIN next_inspection AS ni USING (devcid), icon
> )
> SELECT * FROM devices AS d
> LEFT JOIN last_inspection_info AS lii
> USING (devcid)
>
>
>
> Info: devices is a Table, the rest (last_inspection, next_inspection,
> last_inspection_info, icon) are CTE which use other CTE of the remaining
> 8.
>
> What's interesting if the last one CTE (last_inspection_info) will be
> replaced with FROM, query runs:
>
> WITH ... ()
> SELECT * FROM devices AS d
> LEFT JOIN (
> SELECT
> sort_column || '<span style="' || color || '" ' || on_click || '>'
> || task_icon || '(' || days_to_next_inspection || ') ' || li.start_::date
> ||
> '</span>' AS last_inspection_info,
> devcid, li.evntid
> FROM last_inspection AS li
> INNER JOIN next_inspection AS ni USING (devcid), icon
> ) AS lii
> USING (devcid)
>
> I don't assume that the query is incorrect, precisely because of this. Two:
> that the message points to data that is not even used in the CTE
> 'last_inspection_info', because if I try SELECT * FROM last_inspection_info
> I get one record, and none of the columns contains "36-004" also there is
> no
> such data in devices. In fact that data is in first CTE which use table
> where the data is in, but there is no casting and the data is in text
> column
> and is filtered in such a way that it is no longer present in the CTE.
>
> There was two ways of postgres upgrade:
>
> 1. pg_upgradecluster
> 2. Instalation Postgres 13, run postgresql13 service, and pg_dump from
> 11 and restore on 13.
>
> In both ways there was everything fine but query runs with the above error.
>
>
If you think your query isn't at fault, you should probably try your query
on the latest minor release of the v12 branch (12.8, released in august).

--
Guillaume.

In response to

Browse pgsql-bugs by date

  From Date Subject
Next Message Tom Lane 2021-10-12 20:40:25 Re: BUG #17225: Query with CTE failed after upgrade Postgres from 11 to 12/13
Previous Message PG Bug reporting form 2021-10-12 18:57:21 BUG #17225: Query with CTE failed after upgrade Postgres from 11 to 12/13