What is the difference between the following two functions
gen_random_uuid()provided bypgcryptoextensionuuid_generate_v4()provided byuuid-osspextension
Are they both the same behind the scenes? Any performance impacts on using one?
What is the difference between the following two functions
gen_random_uuid() provided by pgcrypto extensionuuid_generate_v4() provided by uuid-ossp extensionAre they both the same behind the scenes? Any performance impacts on using one?
Are they the same?
No.
The Postgres documetation for uuid-ossp suggests using gen_random_uuid() If you only need randomly-generated (version 4) UUIDs,
The uuid-ossp extension also provides other types of UUID (such as mac-addresses based)
The difference?
I looked at the source and discovered that
uuid_generate_v4() uses arc4random to determine the random part.
gen_random_uuid() uses fortuna instead.
Other than that they do the same job.
Notes:
gen_random_uuid() from the pgcrypto module is now deprecated, because it is natively part of PostgreSQL (since PostgreSQL version 13).uuid_generate_v4() still requires the uuid-ossp module.gen_random_uuid is more than twice as fast. On an empty CREATE TEMPORARY TABLE uuidv4 (id uuid), an INSERT INTO uuidv4 SELECT gen_func() FROM generate_series(1, 1000000) took 1 s 192 ms for gen_func = gen_random_uuid, and 2 s 614 ms for uuid_generate_v4.
– Eemeli Kantola
Aug 04 '23 at 06:34