We were silently allowing underflowing the generated timestamp for the
UUIDv7 value:
# SELECT uuid_extract_timestamp(uuidv7('-57 years'::interval));
uuid_extract_timestamp
-----------------------------
10889-01-23 04:02:36.375+00
(1 row)
RFC 9562[0] doesn't seem to specify that this should be allowed, so
generate an error and forbid the underflow.
I checked the Rust uuid crate[1], and it also errors out with
a timestamp earlier than the Unix epoch.
[0]: https://www.rfc-editor.org/rfc/rfc9562.html
[1]: https://github.com/uuid-rs/uuid/blob/1e6a9669e30d53bae50fd52f16b7a1961fda236b/src/timestamp.rs#L198-L220
--
Tristan Partin
PostgreSQL Contributors Team
AWS (https://aws.amazon.com)