Re: UUID v7 - Mailing list pgsql-hackers
| From | Peter Eisentraut |
|---|---|
| Subject | Re: UUID v7 |
| Date | |
| Msg-id | f4ba858a-8215-4c7e-b66c-60b9213c75e0@eisentraut.org Whole thread Raw |
| In response to | Re: UUID v7 (Junwang Zhao <zhjwpku@gmail.com>) |
| List | pgsql-hackers |
On 27.11.24 00:11, Masahiko Sawada wrote:
> On Tue, Nov 26, 2024 at 1:55 PM Jelte Fennema-Nio <postgres@jeltef.nl> wrote:
>>
>> On Tue, 26 Nov 2024 at 21:48, Sergey Prokhorenko
>> <sergeyprokhorenko@yahoo.com.au> wrote:
>>> gen_uuidv7() is OK
>>
>> I'd very much prefer to not have a gen_ or get_ prefix as argued before[1][2].
>>
>> My vote is still for simply uuidv7() and uuidv4()
>>
>>> uuid-ossp is outdated, slow and not supported by the author. UUIDv7 is the renaissance of UUIDs. So we should not
dependon legacy technology names
>>
>> agreed
>>
>
> It seems that we agreed to use 'uuidv7' instead of 'uuid_v7()'. There
> is discussion whether we should add 'gen_' or 'get_' but let's go back
> to the previously-agreed function name 'uuidv7()' for now. We can
> rename it later if we find a better name.
>
> I've attached the new version patch that incorporated all comments and
> renamed the functions. Also I avoided using 'if defined(__darwin__) ||
> defined(_MSC_VER)' twice.
* doc/src/sgml/func.sgml
The function variant uuidv7(interval) is not documented.
* src/backend/utils/adt/uuid.c
+/* Set the given UUID version and the variant bits */
+static inline void
+uuid_set_version(pg_uuid_t *uuid, unsigned char version)
+{
This should be a block comment, like
/*
* Set the ...
*/
+/*
+ * Generate UUID version 7 per RFC 9562, with the given timestamp.
+ *
...
+static pg_attribute_always_inline pg_uuid_t *
+generate_uuidv7(int64 ns)
Is "ns" the timestamp argument? What format is it? Explain.
+ /*
+ * Shift the current timestamp by the given interval. To make correct
+ * calculating the time shift, we convert the UNIX epoch to TimestampTz
+ * and use timestamptz_pl_interval(). Since this calculation is done
with
+ * microsecond precision, we carry back the nanoseconds.
+ */
This needs a bit of grammar tweaking, I think: "To make correct calculating"
I don't know what the meaning of "carry back" is.
+ Interval *span = PG_GETARG_INTERVAL_P(0);
Not sure why this is named "span"? Maybe "shift" would be better?
* src/include/catalog/pg_proc.dat
+{ oid => '9897', descr => 'generate UUID version 7 with a timestamp
shifted on specific interval',
better "shifted by"?
* src/test/regress/expected/opr_sanity.out
+uuidv4()
+uuidv7()
+uuidv7(interval)
Functions without arguments don't need to be marked leakproof.
uuidv7(interval) internally calls timestamptz_pl_interval(), which is
not leakproof, so I don't think that classification is sound.
* src/test/regress/sql/uuid.sql
+SELECT uuid_extract_version(uuidv4()); --4
+SELECT uuid_extract_version(uuidv7()); --7
Make the whitespace of the comment consistent with the rest of the file.
-SELECT uuid_extract_timestamp('C232AB00-9414-11EC-B3C8-9F6BDECED846') =
'Tuesday, February 22, 2022 2:22:22.00 PM GMT+05:00'; -- RFC 4122bis
test vector
+SELECT uuid_extract_timestamp('C232AB00-9414-11EC-B3C8-9F6BDECED846') =
'Tuesday, February 22, 2022 2:22:22.00 PM GMT+05:00'; -- RFC 9562 test
vector for v1
Here as well.
pgsql-hackers by date: