Re: implement CAST(expr AS type FORMAT 'template')
Vik Fearing <vik@postgresfriends.org>
From: Vik Fearing <vik@postgresfriends.org>
To: "David G. Johnston" <david.g.johnston@gmail.com>,
Corey Huinker <corey.huinker@gmail.com>
Cc: jian he <jian.universality@gmail.com>,
PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2025-08-04T12:57:47Z
Lists: pgsql-hackers
On 04/08/2025 07:55, David G. Johnston wrote: > On Sunday, August 3, 2025, Corey Huinker <corey.huinker@gmail.com> wrote: > > On Sun, Aug 3, 2025 at 11:36 PM David G. Johnston > <david.g.johnston@gmail.com> wrote: > > > I was under the impression that for format to be allowed in > the expression one of the two data types involved has to be > text and the other must not be text. > > > I hadn't understood that, but also hadn't thought of a case where > it might be wanted until just now. What if someone wanted a cast > from JSONB to their custom type, and the format was a specific > keypath to extract from the JSONB? It's true that could be > accomplished by first extracting the keypath and then CASTing that > expression, but the same is true for text->date, regexing a > YYYY-MM-DD into the locale default. > > > Feels like the same basic answer. Create cast has a single (because > it’s one-way) function accepting between 1 and 3 arguments. Change it > to accept between 1 and 4 arguments and the 4th is where the format > expression gets passed. If a format expression is present and the > function doesn’t have a 4th argument, error. This is my position as well. +1 -- Vik Fearing