Обсуждение: 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