add example3: postgres implemented
This commit is contained in:
		
							
								
								
									
										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(); | ||||
		Reference in New Issue
	
	Block a user