snowflake
Snowflake 风格 64 位 ID 生成与序列工具
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
snowflake | 2.5.0 | FUNC | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 4590 | snowflake | 否 | 是 | 否 | 是 | 否 | 否 | snowflake |
| 相关扩展 | spock lolor |
|---|
works on pgedge kernel fork. Set snowflake.node (1..1023) before using snowflake.nextval().
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 2.5.0 | 1817161514 | snowflake | - |
| RPM | PIGSTY | 2.5.0 | 1817161514 | pgedge-$v | - |
| DEB | PIGSTY | 2.5.0 | 1817161514 | pgedge-$v | - |
| OS / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | PIGSTY 18.4 el8.x86_64.pg18 : pgedge-18 pgedge-18-18.4-1PIGSTY.el8.x86_64.rpm
| PIGSTY 17.10 el8.x86_64.pg17 : pgedge-17 pgedge-17-17.10-1PIGSTY.el8.x86_64.rpm
| PIGSTY 16.14 el8.x86_64.pg16 : pgedge-16 pgedge-16-16.14-1PIGSTY.el8.x86_64.rpm
| PIGSTY 15.18 el8.x86_64.pg15 : pgedge-15 pgedge-15-15.18-1PIGSTY.el8.x86_64.rpm
| PIGSTY MISS |
| el8.aarch64 | PIGSTY 18.4 el8.aarch64.pg18 : pgedge-18 pgedge-18-18.4-1PIGSTY.el8.aarch64.rpm
| PIGSTY 17.10 el8.aarch64.pg17 : pgedge-17 pgedge-17-17.10-1PIGSTY.el8.aarch64.rpm
| PIGSTY 16.14 el8.aarch64.pg16 : pgedge-16 pgedge-16-16.14-1PIGSTY.el8.aarch64.rpm
| PIGSTY 15.18 el8.aarch64.pg15 : pgedge-15 pgedge-15-15.18-1PIGSTY.el8.aarch64.rpm
| PIGSTY MISS |
| el9.x86_64 | PIGSTY 18.4 el9.x86_64.pg18 : pgedge-18 pgedge-18-18.4-1PIGSTY.el9.x86_64.rpm
| PIGSTY 17.10 el9.x86_64.pg17 : pgedge-17 pgedge-17-17.10-1PIGSTY.el9.x86_64.rpm
| PIGSTY 16.14 el9.x86_64.pg16 : pgedge-16 pgedge-16-16.14-1PIGSTY.el9.x86_64.rpm
| PIGSTY 15.18 el9.x86_64.pg15 : pgedge-15 pgedge-15-15.18-1PIGSTY.el9.x86_64.rpm
| PIGSTY MISS |
| el9.aarch64 | PIGSTY 18.4 el9.aarch64.pg18 : pgedge-18 pgedge-18-18.4-1PIGSTY.el9.aarch64.rpm
| PIGSTY 17.10 el9.aarch64.pg17 : pgedge-17 pgedge-17-17.10-1PIGSTY.el9.aarch64.rpm
| PIGSTY 16.14 el9.aarch64.pg16 : pgedge-16 pgedge-16-16.14-1PIGSTY.el9.aarch64.rpm
| PIGSTY 15.18 el9.aarch64.pg15 : pgedge-15 pgedge-15-15.18-1PIGSTY.el9.aarch64.rpm
| PIGSTY MISS |
| el10.x86_64 | PIGSTY 18.4 el10.x86_64.pg18 : pgedge-18 pgedge-18-18.4-1PIGSTY.el10.x86_64.rpm
| PIGSTY 17.10 el10.x86_64.pg17 : pgedge-17 pgedge-17-17.10-1PIGSTY.el10.x86_64.rpm
| PIGSTY 16.14 el10.x86_64.pg16 : pgedge-16 pgedge-16-16.14-1PIGSTY.el10.x86_64.rpm
| PIGSTY 15.18 el10.x86_64.pg15 : pgedge-15 pgedge-15-15.18-1PIGSTY.el10.x86_64.rpm
| PIGSTY MISS |
| el10.aarch64 | PIGSTY 18.4 el10.aarch64.pg18 : pgedge-18 pgedge-18-18.4-1PIGSTY.el10.aarch64.rpm
| PIGSTY 17.10 el10.aarch64.pg17 : pgedge-17 pgedge-17-17.10-1PIGSTY.el10.aarch64.rpm
| PIGSTY 16.14 el10.aarch64.pg16 : pgedge-16 pgedge-16-16.14-1PIGSTY.el10.aarch64.rpm
| PIGSTY 15.18 el10.aarch64.pg15 : pgedge-15 pgedge-15-15.18-1PIGSTY.el10.aarch64.rpm
| PIGSTY MISS |
| d12.x86_64 | PIGSTY 18.4 d12.x86_64.pg18 : pgedge-18 pgedge-18_18.4-1PIGSTY~bookworm_amd64.deb
| PIGSTY 17.10 d12.x86_64.pg17 : pgedge-17 pgedge-17_17.10-1PIGSTY~bookworm_amd64.deb
| PIGSTY 16.14 d12.x86_64.pg16 : pgedge-16 pgedge-16_16.14-1PIGSTY~bookworm_amd64.deb
| PIGSTY 15.18 d12.x86_64.pg15 : pgedge-15 pgedge-15_15.18-1PIGSTY~bookworm_amd64.deb
| PIGSTY MISS |
| d12.aarch64 | PIGSTY 18.4 d12.aarch64.pg18 : pgedge-18 pgedge-18_18.4-1PIGSTY~bookworm_arm64.deb
| PIGSTY 17.10 d12.aarch64.pg17 : pgedge-17 pgedge-17_17.10-1PIGSTY~bookworm_arm64.deb
| PIGSTY 16.14 d12.aarch64.pg16 : pgedge-16 pgedge-16_16.14-1PIGSTY~bookworm_arm64.deb
| PIGSTY 15.18 d12.aarch64.pg15 : pgedge-15 pgedge-15_15.18-1PIGSTY~bookworm_arm64.deb
| PIGSTY MISS |
| d13.x86_64 | PIGSTY 18.4 d13.x86_64.pg18 : pgedge-18 pgedge-18_18.4-1PIGSTY~trixie_amd64.deb
| PIGSTY 17.10 d13.x86_64.pg17 : pgedge-17 pgedge-17_17.10-1PIGSTY~trixie_amd64.deb
| PIGSTY 16.14 d13.x86_64.pg16 : pgedge-16 pgedge-16_16.14-1PIGSTY~trixie_amd64.deb
| PIGSTY 15.18 d13.x86_64.pg15 : pgedge-15 pgedge-15_15.18-1PIGSTY~trixie_amd64.deb
| PIGSTY MISS |
| d13.aarch64 | PIGSTY 18.4 d13.aarch64.pg18 : pgedge-18 pgedge-18_18.4-1PIGSTY~trixie_arm64.deb
| PIGSTY 17.10 d13.aarch64.pg17 : pgedge-17 pgedge-17_17.10-1PIGSTY~trixie_arm64.deb
| PIGSTY 16.14 d13.aarch64.pg16 : pgedge-16 pgedge-16_16.14-1PIGSTY~trixie_arm64.deb
| PIGSTY 15.18 d13.aarch64.pg15 : pgedge-15 pgedge-15_15.18-1PIGSTY~trixie_arm64.deb
| PIGSTY MISS |
| u22.x86_64 | PIGSTY 18.4 u22.x86_64.pg18 : pgedge-18 pgedge-18_18.4-1PIGSTY~jammy_amd64.deb
| PIGSTY 17.10 u22.x86_64.pg17 : pgedge-17 pgedge-17_17.10-1PIGSTY~jammy_amd64.deb
| PIGSTY 16.14 u22.x86_64.pg16 : pgedge-16 pgedge-16_16.14-1PIGSTY~jammy_amd64.deb
| PIGSTY 15.18 u22.x86_64.pg15 : pgedge-15 pgedge-15_15.18-1PIGSTY~jammy_amd64.deb
| PIGSTY MISS |
| u22.aarch64 | PIGSTY 18.4 u22.aarch64.pg18 : pgedge-18 pgedge-18_18.4-1PIGSTY~jammy_arm64.deb
| PIGSTY 17.10 u22.aarch64.pg17 : pgedge-17 pgedge-17_17.10-1PIGSTY~jammy_arm64.deb
| PIGSTY 16.14 u22.aarch64.pg16 : pgedge-16 pgedge-16_16.14-1PIGSTY~jammy_arm64.deb
| PIGSTY 15.18 u22.aarch64.pg15 : pgedge-15 pgedge-15_15.18-1PIGSTY~jammy_arm64.deb
| PIGSTY MISS |
| u24.x86_64 | PIGSTY 18.4 u24.x86_64.pg18 : pgedge-18 pgedge-18_18.4-1PIGSTY~noble_amd64.deb
| PIGSTY 17.10 u24.x86_64.pg17 : pgedge-17 pgedge-17_17.10-1PIGSTY~noble_amd64.deb
| PIGSTY 16.14 u24.x86_64.pg16 : pgedge-16 pgedge-16_16.14-1PIGSTY~noble_amd64.deb
| PIGSTY 15.18 u24.x86_64.pg15 : pgedge-15 pgedge-15_15.18-1PIGSTY~noble_amd64.deb
| PIGSTY MISS |
| u24.aarch64 | PIGSTY 18.4 u24.aarch64.pg18 : pgedge-18 pgedge-18_18.4-1PIGSTY~noble_arm64.deb
| PIGSTY 17.10 u24.aarch64.pg17 : pgedge-17 pgedge-17_17.10-1PIGSTY~noble_arm64.deb
| PIGSTY 16.14 u24.aarch64.pg16 : pgedge-16 pgedge-16_16.14-1PIGSTY~noble_arm64.deb
| PIGSTY 15.18 u24.aarch64.pg15 : pgedge-15 pgedge-15_15.18-1PIGSTY~noble_arm64.deb
| PIGSTY MISS |
| u26.x86_64 | PIGSTY 18.4 u26.x86_64.pg18 : pgedge-18 pgedge-18_18.4-1PIGSTY~resolute_amd64.deb
| PIGSTY 17.10 u26.x86_64.pg17 : pgedge-17 pgedge-17_17.10-1PIGSTY~resolute_amd64.deb
| PIGSTY 16.14 u26.x86_64.pg16 : pgedge-16 pgedge-16_16.14-1PIGSTY~resolute_amd64.deb
| PIGSTY 15.18 u26.x86_64.pg15 : pgedge-15 pgedge-15_15.18-1PIGSTY~resolute_amd64.deb
| PIGSTY MISS |
| u26.aarch64 | PIGSTY 18.4 u26.aarch64.pg18 : pgedge-18 pgedge-18_18.4-1PIGSTY~resolute_arm64.deb
| PIGSTY 17.10 u26.aarch64.pg17 : pgedge-17 pgedge-17_17.10-1PIGSTY~resolute_arm64.deb
| PIGSTY 16.14 u26.aarch64.pg16 : pgedge-16 pgedge-16_16.14-1PIGSTY~resolute_arm64.deb
| PIGSTY 15.18 u26.aarch64.pg15 : pgedge-15 pgedge-15_15.18-1PIGSTY~resolute_arm64.deb
| PIGSTY MISS |
构建
您可以使用 pig build 命令构建 snowflake 扩展的 RPM / DEB 包:
pig build pkg snowflake # 构建 RPM / DEB 包
安装
您可以直接安装 snowflake 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install snowflake; # 当前活跃 PG 版本安装
pig ext install -y snowflake -v 18 # PG 18
pig ext install -y snowflake -v 17 # PG 17
pig ext install -y snowflake -v 16 # PG 16
pig ext install -y snowflake -v 15 # PG 15
dnf install -y pgedge-18 # PG 18
dnf install -y pgedge-17 # PG 17
dnf install -y pgedge-16 # PG 16
dnf install -y pgedge-15 # PG 15
apt install -y pgedge-18 # PG 18
apt install -y pgedge-17 # PG 17
apt install -y pgedge-16 # PG 16
apt install -y pgedge-15 # PG 15
创建扩展:
CREATE EXTENSION snowflake;
用法
提供基于 int8 和 sequence 的唯一 ID 生成,使用 Snowflake 格式,适用于分布式系统。
CREATE EXTENSION snowflake;
配置
在 postgresql.conf 中设置节点标识符(必需,值为 1-1023):
snowflake.node = 1
函数
| 函数 | 描述 |
|---|---|
snowflake.nextval([sequence regclass]) | 生成下一个 Snowflake ID(未指定序列时使用内部序列) |
snowflake.currval([sequence regclass]) | 返回序列的当前值 |
snowflake.get_epoch(snowflake int8) | 提取时间戳(自 2023-01-01 起的秒数) |
snowflake.get_count(snowflake int8) | 提取计数部分(每毫秒重置) |
snowflake.get_node(snowflake int8) | 提取节点标识符 |
snowflake.format(snowflake int8) | 返回包含 node、ts 和 count 字段的 JSONB |
示例
-- 生成一个 Snowflake ID
SELECT snowflake.nextval();
-- 136169504773242881
-- 配合命名序列使用
CREATE SEQUENCE orders_id_seq;
SELECT snowflake.nextval('orders_id_seq'::regclass);
-- 提取各组成部分
SELECT snowflake.get_epoch(136169504773242881);
-- 1704996539.845
SELECT to_timestamp(snowflake.get_epoch(136169504773242881));
-- 2024-01-11 13:08:59.845-05
SELECT snowflake.get_node(136169504773242881);
-- 1
SELECT snowflake.format(136169504773242881);
-- {"id": 1, "ts": "2024-01-11 13:08:59.845-05", "count": 0}
-- 用作默认列值
CREATE TABLE orders (
id int8 DEFAULT snowflake.nextval() PRIMARY KEY,
data text
);