add example3: postgres implemented
This commit is contained in:
parent
31e5b003cd
commit
e2f9873db4
37
example3/snowflake-id.sql
Normal file
37
example3/snowflake-id.sql
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
CREATE SEQUENCE public.global_id_seq;
|
||||||
|
ALTER SEQUENCE public.global_id_seq OWNER TO postgres;
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION public.id_generator()
|
||||||
|
RETURNS bigint
|
||||||
|
LANGUAGE 'plpgsql'
|
||||||
|
AS $BODY$
|
||||||
|
DECLARE
|
||||||
|
our_epoch bigint := 1314220021721;
|
||||||
|
seq_id bigint;
|
||||||
|
now_millis bigint;
|
||||||
|
-- the id of this DB shard, must be set for each
|
||||||
|
-- schema shard you have - you could pass this as a parameter too
|
||||||
|
shard_id int := 1;
|
||||||
|
result bigint:= 0;
|
||||||
|
BEGIN
|
||||||
|
SELECT nextval('public.global_id_seq') % 1024 INTO seq_id;
|
||||||
|
|
||||||
|
SELECT FLOOR(EXTRACT(EPOCH FROM clock_timestamp()) * 1000) INTO now_millis;
|
||||||
|
result := (now_millis - our_epoch) << 23;
|
||||||
|
result := result | (shard_id << 10);
|
||||||
|
result := result | (seq_id);
|
||||||
|
return result;
|
||||||
|
END;
|
||||||
|
$BODY$;
|
||||||
|
|
||||||
|
ALTER FUNCTION public.id_generator() OWNER TO postgres;
|
||||||
|
|
||||||
|
create schema shard_1
|
||||||
|
create table users(
|
||||||
|
id bigint not null default id_generator(),
|
||||||
|
email varchar(255) not null unique,
|
||||||
|
first varchar(50),
|
||||||
|
last varchar(50)
|
||||||
|
);
|
||||||
|
|
||||||
|
-- select id_generator();
|
Loading…
x
Reference in New Issue
Block a user