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...
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 constructs that, 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:
Show quoted text
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. PostgreSQL constructs that, 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;
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