Re: UUID v7
От | Andrey Borodin |
---|---|
Тема | Re: UUID v7 |
Дата | |
Msg-id | 96DEC2D9-659A-40E8-B7BA-AF5D162A9E21@yandex-team.ru обсуждение исходный текст |
Ответ на | Re: UUID v7 (Masahiko Sawada <sawada.mshk@gmail.com>) |
Ответы |
Re: UUID v7
|
Список | pgsql-hackers |
> On 12 Dec 2024, at 23:08, Masahiko Sawada <sawada.mshk@gmail.com> wrote: > > Pushed Hi Masahiko! I’ve found some inconsistency in handling of overflow. I’m not sure we should handle it, but anyway. 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 inyear 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. Can we use int128 in code? Or, perhaps, carry this extra 10 bits in the extra argument of generate_uuidv7()? Or, perhaps,leave things as they stand now? Thanks! Best regards, Andrey Borodin.
В списке pgsql-hackers по дате отправления: