Thread: Problem with CAST-ing - am I missing something?
Hi all, One of the things I really like about PostgreSQL is that it normally does what I expect it to do - very little cognitive dissonance. But I'm puzzled by something I came across this evening - took me ages to figure it out! I have a table (sample) as follows (code on fiddle:): CREATE TABLE test (ts, te) AS VALUES ('2023-10-25 14:33:00'::TIMESTAMPTZ, '2023-10-25 15:56:00'::TIMESTAMPTZ); Now, this doesn't work: SELECT (ts, te)::TSTZRANGE FROM test; but this does: SELECT TSTZRANGE(ts, te) FROM test; Bug? Niggle? Can anyone explain to me why this is? To me, it's obvious what I want to do with the first statement - ideas, pointers, URLs, whatever welcome. TIA and rgs, Pól...
Sorry folks - fiddle is here: https://dbfiddle.uk/bT4idNK6 Rgs, Pól...
> On Oct 25, 2023, at 17:21, Pól Ua Laoínecháin <linehanp@tcd.ie> wrote: > > SELECT (ts, te)::TSTZRANGE FROM test; That syntax doesn't mean what you probably think it does. (ts, te) defines a record type with two fields. PostgreSQL constructsthat, and then attempts to apply the cast. There's no conversion path from that to TSTZRANGE, so the system complains. It's imaginable, I guess, that such a path could be added, but the right way to do it is what you do here: > SELECT TSTZRANGE(ts, te) FROM test;
On 10/25/23 17:26, Christophe Pettus wrote: > > >> On Oct 25, 2023, at 17:21, Pól Ua Laoínecháin <linehanp@tcd.ie> wrote: >> >> SELECT (ts, te)::TSTZRANGE FROM test; > > That syntax doesn't mean what you probably think it does. (ts, te) defines a record type with two fields. PostgreSQLconstructs that, and then attempts to apply the cast. There's no conversion path from that to TSTZRANGE, so thesystem complains. It's imaginable, I guess, that such a path could be added, but the right way to do it is what you dohere: > >> SELECT TSTZRANGE(ts, te) FROM test; > Or do something like: select '[2023-10-25 14:33:00, 2023-10-25 15:56:00)'::TSTZRANGE; tstzrange ------------------------------------------------------- ["10/25/2023 14:33:00 PDT","10/25/2023 15:56:00 PDT") per: https://www.postgresql.org/docs/current/rangetypes.html#RANGETYPES-IO > > -- Adrian Klaver adrian.klaver@aklaver.com