From: | Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com> |
---|---|
To: | Andrey Borodin <x4mmm(at)yandex-team(dot)ru> |
Cc: | Daniel Verite <daniel(at)manitou-mail(dot)org>, Peter Eisentraut <peter(at)eisentraut(dot)org>, Jelte Fennema-Nio <postgres(at)jeltef(dot)nl>, Sergey Prokhorenko <sergeyprokhorenko(at)yahoo(dot)com(dot)au>, Przemysław Sztoch <przemyslaw(at)sztoch(dot)pl>, Michael Paquier <michael(at)paquier(dot)xyz>, Aleksander Alekseev <aleksander(at)timescale(dot)com>, Pgsql-Hackers Mailing List <pgsql-hackers(at)postgresql(dot)org>, "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>, Mat Arye <mat(at)timescaledb(dot)com>, Matthias van de Meent <boekewurm+postgres(at)gmail(dot)com>, Nikolay Samokhvalov <samokhvalov(at)gmail(dot)com>, Junwang Zhao <zhjwpku(at)gmail(dot)com>, Stepan Neretin <sncfmgg(at)gmail(dot)com> |
Subject: | Re: UUID v7 |
Date: | 2025-01-30 19:54:59 |
Message-ID: | CAD21AoB5Fo6YcPpLwyYRw1RG85iQ8Lj=qnrip1c6jUpStfK+qw@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Thu, Jan 30, 2025 at 12:59 AM Andrey Borodin <x4mmm(at)yandex-team(dot)ru> wrote:
>
>
>
> > On 12 Dec 2024, at 23:08, Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com> wrote:
> >
> > Pushed
>
> Hi Masahiko!
>
> I’ve found some inconsistency in handling of overflow. I’m not sure we should handle it, but anyway.
Thank you for the report!
>
> postgres=# select x,
> uuid_extract_timestamp(uuidv7((x::text || ' year'::text)::interval)),
> (x::text || ' year'::text)::interval
> from generate_series(237,238) x;;
> x | uuid_extract_timestamp | interval
> -----+-----------------------------+-----------
> 237 | 2262-01-30 13:43:23.737+05 | 237 years
> 238 | 10598-02-10 19:41:13.736+05 | 238 years
> (2 rows)
>
> The thing is per RFC we represent time as number of nanoseconds since UNIX epoch. And we use int64, which will overflow in year 2262. I sincerely wish us to see this great year.
> We can have a couple more centuries if we resort to unsigned int 64.
>
> But it would be great to make our code work until
>
> postgres=# select uuid_extract_timestamp('FFFFFFFF-FFFF-7FFF-bFFF-FFFFFFFFFFFF');
> uuid_extract_timestamp
> -----------------------------
> 10889-08-02 10:31:50.655+05
> (1 row)
>
> And using uint64 won’t help us.
I don't think using uint64 instead of int64 for nanoseconds doesn't
resolve the problem. We will not be able to shift the timestamp for a
date before 1970/1/1.
> Or, perhaps, carry this extra 10 bits in the extra argument of generate_uuidv7()?
I like this idea. Would you like to write a patch, or shall I?
Regards,
--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com
From | Date | Subject | |
---|---|---|---|
Next Message | Pavel Borisov | 2025-01-30 20:32:03 | Re: Using Expanded Objects other than Arrays from plpgsql |
Previous Message | Tom Lane | 2025-01-30 18:27:32 | Re: JIT: The nullness of casetest.value can be determined at the JIT compile time. |