snowflake
Overview
| Package | Version | Category | License | Language |
|---|---|---|---|---|
snowflake | 2.6.0 | FUNC | PostgreSQL | C |
| ID | Extension | Bin | Lib | Load | Create | Trust | Reloc | Schema |
|---|---|---|---|---|---|---|---|---|
| 4590 | snowflake | No | Yes | No | Yes | No | No | snowflake |
Bundled with pgEdge 15.19/16.15/17.11/18.6; set snowflake.node.
Version
| Type | Repo | Version | PG Ver | Package | Deps |
|---|---|---|---|---|---|
| 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 |
Build
You can build the RPM / DEB packages for snowflake using pig build:
Install
You can install snowflake directly. First, make sure the PGDG and PIGSTY repositories are added and enabled:
Install the extension using pig or apt/yum/dnf:
Create Extension:
Usage
Sources:
- snowflake v2.6.0 README
- Creating a Snowflake sequence
- Converting PostgreSQL sequences
- Function reference
- v2.6.0 changelog
- v2.6.0 C implementation
- Tagged SQL API definitions
- v2.6.0 control file
snowflake generates distributed bigint identifiers from a timestamp, a per-node identifier, and an in-millisecond counter. Existing PostgreSQL sequences can be converted so table defaults continue using nextval(...) while producing Snowflake IDs.
Configuration
Assign every writable node a distinct identifier in postgresql.conf, then reload PostgreSQL:
Reusing a node identifier on concurrently writable servers can generate duplicate IDs.
Convert a Sequence
Create a normal PostgreSQL sequence, then convert its definition. Existing values in referencing columns are not rewritten.
Functions
| Function | Description |
|---|---|
snowflake.nextval([sequence regclass]) | Generate the next Snowflake ID (uses internal sequence if none specified) |
snowflake.currval([sequence regclass]) | Return the current value of the sequence |
snowflake.get_epoch(snowflake int8) | Return Unix epoch seconds since 1970-01-01, with millisecond precision |
snowflake.get_count(snowflake int8) | Extract the count part (resets per millisecond) |
snowflake.get_node(snowflake int8) | Extract the node identifier |
snowflake.format(snowflake int8) | Return JSONB fields id (node identifier), ts, and count |
Examples
Review and Upgrade
Review converted table defaults with psql \d+ or the PostgreSQL catalogs. They should call snowflake.nextval(...) rather than the original nextval(...):
Version 2.5.0 fixes dump/restore of converted sequences whose MAXVALUE was left at the normal bigint maximum. It also repairs conversion SQL for affected sequences and adds PostgreSQL 18 support.
Caveats
- Conversion changes the sequence definition, not IDs already stored in table rows.
- A Snowflake generator can emit at most 4096 counter values per millisecond. Do not configure a sequence increment above 4096.
- Keep the node identifier stable and unique for the lifetime of concurrent writers; record it as part of cluster provisioning and failover procedures.
- Install the same extension version on every node before logical replication or rolling changes involving converted sequence definitions.
Version 2.6.0 adds PostgreSQL 19 support; the current Pigsty pgEdge bundle covers PostgreSQL 15–18. Assign snowflake.node within 1–1023; its default is intentionally invalid. The control file fixes schema snowflake and does not require shared preload. The 2.5.0 dump/restore repair remains relevant when upgrading converted sequences from earlier releases.
Use an administrator to install the C extension and convert identity definitions. ID generation requires USAGE or UPDATE on the selected sequence; the current value is defined only after that sequence has generated an ID in the same session.
Was this page helpful?
Thanks—your feedback helps us improve this page.
What got in the way? (optional)