diff options
| author | Peter Eisentraut | 2019-07-14 12:30:27 +0000 |
|---|---|---|
| committer | Peter Eisentraut | 2019-07-14 12:30:27 +0000 |
| commit | 5925e5549890416bcf588334d9d0bc99f8ad6c7f (patch) | |
| tree | 0b9d6556f5e4dcaa389d2f35cf60804645d2c5f8 /contrib/pgcrypto | |
| parent | 565f3390005318ea4c982b8d054d56e9fe5a6454 (diff) | |
Add gen_random_uuid function
This adds a built-in function to generate UUIDs.
PostgreSQL hasn't had a built-in function to generate a UUID yet,
relying on external modules such as uuid-ossp and pgcrypto to provide
one. Now that we have a strong random number generator built-in, we
can easily provide a version 4 (random) UUID generation function.
This patch takes the existing function gen_random_uuid() from pgcrypto
and makes it a built-in function. The pgcrypto implementation now
internally redirects to the built-in one.
Reviewed-by: Fabien COELHO <coelho@cri.ensmp.fr>
Discussion: https://www.postgresql.org/message-id/6a65610c-46fc-2323-6b78-e8086340a325@2ndquadrant.com
Diffstat (limited to 'contrib/pgcrypto')
| -rw-r--r-- | contrib/pgcrypto/pgcrypto.c | 16 |
1 files changed, 2 insertions, 14 deletions
diff --git a/contrib/pgcrypto/pgcrypto.c b/contrib/pgcrypto/pgcrypto.c index c5587679098..f69ae107c3a 100644 --- a/contrib/pgcrypto/pgcrypto.c +++ b/contrib/pgcrypto/pgcrypto.c @@ -446,20 +446,8 @@ PG_FUNCTION_INFO_V1(pg_random_uuid); Datum pg_random_uuid(PG_FUNCTION_ARGS) { - uint8 *buf = (uint8 *) palloc(UUID_LEN); - - /* Generate random bits. */ - if (!pg_strong_random(buf, UUID_LEN)) - px_THROW_ERROR(PXE_NO_RANDOM); - - /* - * Set magic numbers for a "version 4" (pseudorandom) UUID, see - * http://tools.ietf.org/html/rfc4122#section-4.4 - */ - buf[6] = (buf[6] & 0x0f) | 0x40; /* "version" field */ - buf[8] = (buf[8] & 0x3f) | 0x80; /* "variant" field */ - - PG_RETURN_UUID_P((pg_uuid_t *) buf); + /* redirect to built-in function */ + return gen_random_uuid(fcinfo); } static void * |
