snowflake
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
snowflake | 2.6.0 | FUNC | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 4590 | snowflake | 否 | 是 | 否 | 是 | 否 | 否 | snowflake |
Bundled with pgEdge 15.19/16.15/17.11/18.6; set snowflake.node.
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 2.6.0 | 1817161514 | snowflake | - |
| RPM | PIGSTY | 18.6 | 1817161514 | pgedge-$v | - |
| DEB | PIGSTY | 18.6 | 1817161514 | pgedge-$v | - |
| OS / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | PIGSTY 18.6 el8.x86_64.pg18 : pgedge-18 pgedge-18-18.6-2PGSTY.el8.x86_64.rpm
| PIGSTY 17.11 el8.x86_64.pg17 : pgedge-17 pgedge-17-17.11-2PGSTY.el8.x86_64.rpm
| PIGSTY 16.15 el8.x86_64.pg16 : pgedge-16 pgedge-16-16.15-2PGSTY.el8.x86_64.rpm
| PIGSTY 15.19 el8.x86_64.pg15 : pgedge-15 pgedge-15-15.19-2PGSTY.el8.x86_64.rpm
| N/A |
| el8.aarch64 | PIGSTY 18.6 el8.aarch64.pg18 : pgedge-18 pgedge-18-18.6-2PGSTY.el8.aarch64.rpm
| PIGSTY 17.11 el8.aarch64.pg17 : pgedge-17 pgedge-17-17.11-2PGSTY.el8.aarch64.rpm
| PIGSTY 16.15 el8.aarch64.pg16 : pgedge-16 pgedge-16-16.15-2PGSTY.el8.aarch64.rpm
| PIGSTY 15.19 el8.aarch64.pg15 : pgedge-15 pgedge-15-15.19-2PGSTY.el8.aarch64.rpm
| N/A |
| el9.x86_64 | PIGSTY 18.6 el9.x86_64.pg18 : pgedge-18 pgedge-18-18.6-2PGSTY.el9.x86_64.rpm
| PIGSTY 17.11 el9.x86_64.pg17 : pgedge-17 pgedge-17-17.11-2PGSTY.el9.x86_64.rpm
| PIGSTY 16.15 el9.x86_64.pg16 : pgedge-16 pgedge-16-16.15-2PGSTY.el9.x86_64.rpm
| PIGSTY 15.19 el9.x86_64.pg15 : pgedge-15 pgedge-15-15.19-2PGSTY.el9.x86_64.rpm
| N/A |
| el9.aarch64 | PIGSTY 18.6 el9.aarch64.pg18 : pgedge-18 pgedge-18-18.6-2PGSTY.el9.aarch64.rpm
| PIGSTY 17.11 el9.aarch64.pg17 : pgedge-17 pgedge-17-17.11-2PGSTY.el9.aarch64.rpm
| PIGSTY 16.15 el9.aarch64.pg16 : pgedge-16 pgedge-16-16.15-2PGSTY.el9.aarch64.rpm
| PIGSTY 15.19 el9.aarch64.pg15 : pgedge-15 pgedge-15-15.19-2PGSTY.el9.aarch64.rpm
| N/A |
| el10.x86_64 | PIGSTY 18.6 el10.x86_64.pg18 : pgedge-18 pgedge-18-18.6-2PGSTY.el10.x86_64.rpm
| PIGSTY 17.11 el10.x86_64.pg17 : pgedge-17 pgedge-17-17.11-2PGSTY.el10.x86_64.rpm
| PIGSTY 16.15 el10.x86_64.pg16 : pgedge-16 pgedge-16-16.15-2PGSTY.el10.x86_64.rpm
| PIGSTY 15.19 el10.x86_64.pg15 : pgedge-15 pgedge-15-15.19-2PGSTY.el10.x86_64.rpm
| N/A |
| el10.aarch64 | PIGSTY 18.6 el10.aarch64.pg18 : pgedge-18 pgedge-18-18.6-2PGSTY.el10.aarch64.rpm
| PIGSTY 17.11 el10.aarch64.pg17 : pgedge-17 pgedge-17-17.11-2PGSTY.el10.aarch64.rpm
| PIGSTY 16.15 el10.aarch64.pg16 : pgedge-16 pgedge-16-16.15-2PGSTY.el10.aarch64.rpm
| PIGSTY 15.19 el10.aarch64.pg15 : pgedge-15 pgedge-15-15.19-2PGSTY.el10.aarch64.rpm
| N/A |
| d12.x86_64 | PIGSTY 18.6 d12.x86_64.pg18 : pgedge-18 pgedge-18_18.6-2PGSTY~bookworm_amd64.deb
| PIGSTY 17.11 d12.x86_64.pg17 : pgedge-17 pgedge-17_17.11-2PGSTY~bookworm_amd64.deb
| PIGSTY 16.15 d12.x86_64.pg16 : pgedge-16 pgedge-16_16.15-2PGSTY~bookworm_amd64.deb
| PIGSTY 15.19 d12.x86_64.pg15 : pgedge-15 pgedge-15_15.19-2PGSTY~bookworm_amd64.deb
| N/A |
| d12.aarch64 | PIGSTY 18.6 d12.aarch64.pg18 : pgedge-18 pgedge-18_18.6-2PGSTY~bookworm_arm64.deb
| PIGSTY 17.11 d12.aarch64.pg17 : pgedge-17 pgedge-17_17.11-2PGSTY~bookworm_arm64.deb
| PIGSTY 16.15 d12.aarch64.pg16 : pgedge-16 pgedge-16_16.15-2PGSTY~bookworm_arm64.deb
| PIGSTY 15.19 d12.aarch64.pg15 : pgedge-15 pgedge-15_15.19-2PGSTY~bookworm_arm64.deb
| N/A |
| d13.x86_64 | PIGSTY 18.6 d13.x86_64.pg18 : pgedge-18 pgedge-18_18.6-2PGSTY~trixie_amd64.deb
| PIGSTY 17.11 d13.x86_64.pg17 : pgedge-17 pgedge-17_17.11-2PGSTY~trixie_amd64.deb
| PIGSTY 16.15 d13.x86_64.pg16 : pgedge-16 pgedge-16_16.15-2PGSTY~trixie_amd64.deb
| PIGSTY 15.19 d13.x86_64.pg15 : pgedge-15 pgedge-15_15.19-2PGSTY~trixie_amd64.deb
| N/A |
| d13.aarch64 | PIGSTY 18.6 d13.aarch64.pg18 : pgedge-18 pgedge-18_18.6-2PGSTY~trixie_arm64.deb
| PIGSTY 17.11 d13.aarch64.pg17 : pgedge-17 pgedge-17_17.11-2PGSTY~trixie_arm64.deb
| PIGSTY 16.15 d13.aarch64.pg16 : pgedge-16 pgedge-16_16.15-2PGSTY~trixie_arm64.deb
| PIGSTY 15.19 d13.aarch64.pg15 : pgedge-15 pgedge-15_15.19-2PGSTY~trixie_arm64.deb
| N/A |
| u22.x86_64 | PIGSTY 18.6 u22.x86_64.pg18 : pgedge-18 pgedge-18_18.6-2PGSTY~jammy_amd64.deb
| PIGSTY 17.11 u22.x86_64.pg17 : pgedge-17 pgedge-17_17.11-2PGSTY~jammy_amd64.deb
| PIGSTY 16.15 u22.x86_64.pg16 : pgedge-16 pgedge-16_16.15-2PGSTY~jammy_amd64.deb
| PIGSTY 15.19 u22.x86_64.pg15 : pgedge-15 pgedge-15_15.19-2PGSTY~jammy_amd64.deb
| N/A |
| u22.aarch64 | PIGSTY 18.6 u22.aarch64.pg18 : pgedge-18 pgedge-18_18.6-2PGSTY~jammy_arm64.deb
| PIGSTY 17.11 u22.aarch64.pg17 : pgedge-17 pgedge-17_17.11-2PGSTY~jammy_arm64.deb
| PIGSTY 16.15 u22.aarch64.pg16 : pgedge-16 pgedge-16_16.15-2PGSTY~jammy_arm64.deb
| PIGSTY 15.19 u22.aarch64.pg15 : pgedge-15 pgedge-15_15.19-2PGSTY~jammy_arm64.deb
| N/A |
| u24.x86_64 | PIGSTY 18.6 u24.x86_64.pg18 : pgedge-18 pgedge-18_18.6-2PGSTY~noble_amd64.deb
| PIGSTY 17.11 u24.x86_64.pg17 : pgedge-17 pgedge-17_17.11-2PGSTY~noble_amd64.deb
| PIGSTY 16.15 u24.x86_64.pg16 : pgedge-16 pgedge-16_16.15-2PGSTY~noble_amd64.deb
| PIGSTY 15.19 u24.x86_64.pg15 : pgedge-15 pgedge-15_15.19-2PGSTY~noble_amd64.deb
| N/A |
| u24.aarch64 | PIGSTY 18.6 u24.aarch64.pg18 : pgedge-18 pgedge-18_18.6-2PGSTY~noble_arm64.deb
| PIGSTY 17.11 u24.aarch64.pg17 : pgedge-17 pgedge-17_17.11-2PGSTY~noble_arm64.deb
| PIGSTY 16.15 u24.aarch64.pg16 : pgedge-16 pgedge-16_16.15-2PGSTY~noble_arm64.deb
| PIGSTY 15.19 u24.aarch64.pg15 : pgedge-15 pgedge-15_15.19-2PGSTY~noble_arm64.deb
| N/A |
| u26.x86_64 | PIGSTY 18.6 u26.x86_64.pg18 : pgedge-18 pgedge-18_18.6-2PGSTY~resolute_amd64.deb
| PIGSTY 17.11 u26.x86_64.pg17 : pgedge-17 pgedge-17_17.11-2PGSTY~resolute_amd64.deb
| PIGSTY 16.15 u26.x86_64.pg16 : pgedge-16 pgedge-16_16.15-2PGSTY~resolute_amd64.deb
| PIGSTY 15.19 u26.x86_64.pg15 : pgedge-15 pgedge-15_15.19-2PGSTY~resolute_amd64.deb
| N/A |
| u26.aarch64 | PIGSTY 18.6 u26.aarch64.pg18 : pgedge-18 pgedge-18_18.6-2PGSTY~resolute_arm64.deb
| PIGSTY 17.11 u26.aarch64.pg17 : pgedge-17 pgedge-17_17.11-2PGSTY~resolute_arm64.deb
| PIGSTY 16.15 u26.aarch64.pg16 : pgedge-16 pgedge-16_16.15-2PGSTY~resolute_arm64.deb
| PIGSTY 15.19 u26.aarch64.pg15 : pgedge-15 pgedge-15_15.19-2PGSTY~resolute_arm64.deb
| N/A |
构建
您可以使用 pig build 命令构建 snowflake 扩展的 RPM / DEB 包:
安装
您可以直接安装 snowflake 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
使用 pig 或者是 apt/yum/dnf 安装扩展:
创建扩展:
用法
来源:
- snowflake v2.6.0 README
- 创建 Snowflake 序列
- 转换 PostgreSQL 序列
- 函数参考
- v2.6.0 更新日志
- v2.6.0 C 实现
- 对应标签的 SQL API 定义
- v2.6.0 控制文件
snowflake 生成分布式 bigint 标识符,从时间戳、节点标识符和毫秒计数器中产生。现有的 PostgreSQL 序列可以被转换,使得表的默认值继续使用 nextval(...) 同时生产 Snowflake ID。
配置
在 postgresql.conf 中为每个可写的节点分配一个唯一的标识符,然后重新加载 PostgreSQL:
在同一时间可以写入的服务器上重复使用节点标识符可能会生成重复的 ID。
转换一个序列
创建一个普通的 PostgreSQL 序列,然后转换其定义。引用列中的现有值不会被重写。
函数
| 函数 | 描述 |
|---|---|
snowflake.nextval([sequence regclass]) | 生成下一个 Snowflake ID(如果没有指定序列,则使用内部序列) |
snowflake.currval([sequence regclass]) | 返回序列的当前值 |
snowflake.get_epoch(snowflake int8) | 返回自 1970-01-01 起的 Unix 纪元秒数,精度为毫秒 |
snowflake.get_count(snowflake int8) | 提取计数值部分(每毫秒重置) |
snowflake.get_node(snowflake int8) | 提取节点标识符 |
snowflake.format(snowflake int8) | 返回 JSONB 字段 id(节点标识符)、ts 和 count |
示例
审查与升级
使用 psql \d+ 或 PostgreSQL 系统目录审查转换后的表默认值。它们应该调用 snowflake.nextval(...) 而不是原来的 nextval(...)
版本 2.5.0 修复了导出/恢复被转换序列的 MAXVALUE 设置为正常 bigint 最大值的问题。它还修复了受影响序列的转换 SQL 并增加了对 PostgreSQL 18 的支持。
注意事项
- 转换会改变序列定义,而不是已经存储在表行中的 ID。
- Snowflake 生成器每毫秒最多可以发出 4096 个计数值。不要将序列增量配置为超过 4096。
- 保持节点标识符在整个并发写入的生命周期内稳定且唯一;将其作为集群规划和故障转移流程的一部分进行记录。
- 在逻辑复制或涉及转换后序列定义的滚动更改之前,在每个节点上安装相同的扩展版本。
2.6.0 新增 PostgreSQL 19 支持;当前 Pigsty pgEdge 组合包覆盖 PostgreSQL 15–18。snowflake.node 必须位于 1–1023,默认值有意设为无效。控制文件固定使用 snowflake 模式,无需共享预加载。从更早版本升级已经转换过的序列时,仍须关注 2.5.0 的导出与恢复修复。
应由管理员安装 C 扩展并转换 identity 定义。生成 ID 需要目标序列的 USAGE 或 UPDATE 权限;只有同一会话中该序列已经生成过 ID 后,当前值才有定义。
这个页面对您有帮助吗?
感谢反馈,我们会据此改进这篇文档。
哪里没有解决?(可选)