pgsql的雪花id函数实现
先建立雪花id序列
CREATE SEQUENCE "public"."assign_id_seq"
INCREMENT 1
MINVALUE 1
MAXVALUE 99999999999999999
START 1
CACHE 1
CYCLE ;
ALTER SEQUENCE "public"."assign_id_seq" OWNER TO "postgres";
后建立生成雪花id的函数
CREATE OR REPLACE FUNCTION "public"."snow_next_id"(OUT "result" int8)
RETURNS "pg_catalog"."int8" AS $BODY$
DECLARE
our_epoch bigint := 1314220021721;
seq_id bigint;
now_millis bigint;
shard_id int := 5;
BEGIN
seq_id := nextval('assign_id_seq') % 1024;
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);
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION "public"."snow_next_id"(OUT "result" int8) OWNER TO "postgres";
函数使用
SELECT snow_next_id();
输出结果
数据库表id主键设置默认值
ok,这样就可以,插入数据时候,自动生成雪花id了!!!
补充知识
PostgreSQL是一种免费且开源的关系型数据库管理系统,广泛应用于各种大中小型企业和项目。在本文中,我将详细介绍PostgreSQL数据库的各个方面。
1. 数据类型
PostgreSQL提供了丰富的数据类型,包括整型、浮点型、日期/时间型、字符串型、布尔型等。此外,它还支持数组、范围、JSON、XML等复杂数据类型,以满足不同场景下的需求。
2. 表和模式
在PostgreSQL中,数据以表的形式存储。每个表都有自己的结构和列定义。您可以为表创建索引来提高查询性能。此外,表还可以通过使用外键和约束来保持数据的完整性。
数据库中的表可以按照所属的模式进行组织。模式是一种逻辑上的容器,用于将相关的表和其他数据库对象分组。
3. 查询语言
PostgreSQL使用SQL作为其查询语言。除了标准的SQL功能外,PostgreSQL还提供了许多扩展功能,例如窗口函数、全文搜索、地理空间索引等。您可以使用SELECT语句进行数据检索,使用INSERT、UPDATE和DELETE语句进行数据操作。
4. 事务处理
PostgreSQL支持ACID(原子性、一致性、隔离性和持久¥¥¥务。这意味着您可以将多个数据库操作组合成一个逻辑上的单元,以确保数据的完整性和一致性。如果在事务进行过程中发生错误,您可以使用ROLLBACK语句回滚到事务开始前的状态。
5. 安全性
PostgreSQL提供了丰富的安全功能来保护您的数据。您可以使用角色和权限管理来限制对数据库对象的访问。此外,还可以通过加密传输和存储的方式来保护敏感数据。
6. 扩展性
PostgreSQL具有良好的扩展性,允许根据需求进行定制化开发。您可以编写自定义函数、触发器、存储过程等来增强数据库的功能。此外,PostgreSQL还支持插件机制,使得第三方开发者可以开发各种插件来扩展数据库的功能。
7. 高可用性和容错能力
PostgreSQL提供了多种高可用性和容错能力的解决方案。其中包括流复制、逻辑复制、热备份和基于时间点恢复等。这些功能可以确保数据库在故障情况下具有较高的可用性,并且可以快速进行恢复。
8. 性能优化
PostgreSQL提供了一系列性能优化工具和技术帮助您提升数据库的性能。其中包括查询优化器、自动化的统计信息收集、并行执行等。此外,您还可以使用Explain语句来分析查询计划,以找出潜在的性能瓶颈。
9. 开发生态系统
PostgreSQL有一个活跃的开发生态系统,有许多第三方工具和库可供使用。这些工具和库可以帮助您更好地管理和开发PostgreSQL数据库。
总结一下,PostgreSQL是一个功能强大、稳定可靠的关系型数据库管理系统。它提供了丰富的功能和强大的扩展性,适用于各种各样的应用场景。无论是小型项目还是大型企业级系统,PostgreSQL都是一个值得考虑的选择。