Skip to content

Instantly share code, notes, and snippets.

@jay-dee7
Created September 17, 2022 12:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jay-dee7/62fb7f665101a52c9c27dcff5bad03b6 to your computer and use it in GitHub Desktop.
Save jay-dee7/62fb7f665101a52c9c27dcff5bad03b6 to your computer and use it in GitHub Desktop.
PostgreSQL UUID V7 function
create extension if not exists pgcrypto;
create or replace function uuid_generate_v7()
returns uuid
as $$
declare
ver_rand_var bytea = e'\\000\\000\\000';
unix_time_ms bytea;
rand_bytes bytea;
begin
unix_time_ms = substring(int8send(floor(extract(epoch from clock_timestamp()) * 1000)::bigint) from 3);
rand_bytes = gen_random_bytes(3);
ver_rand_var = set_byte(ver_rand_var, 0, (b'0111'||get_byte(rand_bytes, 0)::bit(4))::bit(8)::int);
ver_rand_var = set_byte(ver_rand_var, 1, get_byte(rand_bytes, 1));
ver_rand_var = set_byte(ver_rand_var, 2, (b'10'||get_byte(rand_bytes, 2)::bit(6))::bit(8)::int);
return substring((unix_time_ms || ver_rand_var || gen_random_bytes(7))::text from 3)::uuid;
end
$$
language plpgsql
volatile;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment