spock
spock : Multi-master logical replication extension for PostgreSQL
Overview
| ID | Extension | Package | Version | Category | License | Language |
|---|---|---|---|---|---|---|
| 9570 | spock | spock | 5.0.10 |
ETL | PostgreSQL | C |
| Attribute | Has Binary | Has Library | Need Load | Has DDL | Relocatable | Trusted |
|---|---|---|---|---|---|---|
| --sLd-- | Yes | Yes | Yes | Yes | no | no |
| Relationships | |
|---|---|
| Schemas | spock |
| See Also | pglogical pgactive mimeo pgoutput pgl_ddl_deploy logical_ddl postgres_fdw lolor citus plproxy |
Packages
| Type | Repo | Version | PG Major Compatibility | Package Pattern | Dependencies |
|---|---|---|---|---|---|
| EXT | PIGSTY | 5.0.10 |
18 17 16 15 14 | spock |
- |
| RPM | PIGSTY | 18.4 |
18 17 16 15 14 | pgedge-$v |
- |
| DEB | PIGSTY | 18.4 |
18 17 16 15 14 | pgedge-$v |
- |
| Linux / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | PIGSTY 18.4 | PIGSTY 17.10 | PIGSTY 16.14 | PIGSTY 15.18 | N/A |
| el8.aarch64 | PIGSTY 18.4 | PIGSTY 17.10 | PIGSTY 16.14 | PIGSTY 15.18 | N/A |
| el9.x86_64 | PIGSTY 18.4 | PIGSTY 17.10 | PIGSTY 16.14 | PIGSTY 15.18 | N/A |
| el9.aarch64 | PIGSTY 18.4 | PIGSTY 17.10 | PIGSTY 16.14 | PIGSTY 15.18 | N/A |
| el10.x86_64 | PIGSTY 18.4 | PIGSTY 17.10 | PIGSTY 16.14 | PIGSTY 15.18 | N/A |
| el10.aarch64 | PIGSTY 18.4 | PIGSTY 17.10 | PIGSTY 16.14 | PIGSTY 15.18 | N/A |
| d12.x86_64 | PIGSTY 18.4 | PIGSTY 17.10 | PIGSTY 16.14 | PIGSTY 15.18 | N/A |
| d12.aarch64 | PIGSTY 18.4 | PIGSTY 17.10 | PIGSTY 16.14 | PIGSTY 15.18 | N/A |
| d13.x86_64 | PIGSTY 18.4 | PIGSTY 17.10 | PIGSTY 16.14 | PIGSTY 15.18 | N/A |
| d13.aarch64 | PIGSTY 18.4 | PIGSTY 17.10 | PIGSTY 16.14 | PIGSTY 15.18 | N/A |
| u22.x86_64 | PIGSTY 18.4 | PIGSTY 17.10 | PIGSTY 16.14 | PIGSTY 15.18 | N/A |
| u22.aarch64 | PIGSTY 18.4 | PIGSTY 17.10 | PIGSTY 16.14 | PIGSTY 15.18 | N/A |
| u24.x86_64 | PIGSTY 18.4 | PIGSTY 17.10 | PIGSTY 16.14 | PIGSTY 15.18 | N/A |
| u24.aarch64 | PIGSTY 18.4 | PIGSTY 17.10 | PIGSTY 16.14 | PIGSTY 15.18 | N/A |
| u26.x86_64 | PIGSTY 18.4 | PIGSTY 17.10 | PIGSTY 16.14 | PIGSTY 15.18 | N/A |
| u26.aarch64 | PIGSTY 18.4 | PIGSTY 17.10 | PIGSTY 16.14 | PIGSTY 15.18 | N/A |
Source
github.com/pgEdge/spock
spock-5.0.10.tar.gz
Install
Make sure PGDG and PIGSTY repo available:
Install this extension with pig:
Config this extension to shared_preload_libraries:
Create this extension with:
Usage
Sources:
spock provides active-active logical replication for PostgreSQL 15 through 18. Each participating database is a Spock node; a multi-master topology is formed by creating directed subscriptions between nodes.
Configuration
In postgresql.conf:
Enabling
Creating Nodes
On each node, create a node identity:
Creating Subscriptions
For multi-master, each node subscribes to every other node:
Replication Set Management
Key Features
- Multi-master (active-active) replication
- Automatic DDL replication
- Conflict detection and resolution using commit timestamps
- Row and column filtering
- Supports PostgreSQL 15, 16, 17, and 18
- Tables must have primary keys and matching schemas across nodes
Operations and Caveats
- Install
spockand add it toshared_preload_librarieson every participating server before creating nodes or subscriptions. - Keep table definitions, data types, primary keys, and relevant unique indexes identical across nodes. Coordinate DDL even when DDL replication is enabled.
- Replicated tables need a primary key or another usable replica identity. Temporary and unlogged tables are not replication targets.
- Spock operates per database. Repeat extension and topology setup for each database that participates.
- Active-active conflict handling depends on commit timestamps and policy. Test simultaneous inserts and updates, especially nullable unique keys, before production use.
- Upstream documents platform/build requirements in the README; verify that the PostgreSQL build and Spock package used on every node are compatible.
Version 5.0.10
5.0.10 is a patch release in the 5.0 line. Its release notes include fixes for unique indexes containing NULL, NULLS NOT DISTINCT conflict handling, refreshing cached index metadata after an index is dropped, exception-path memory handling, and numerical version checks used during rolling patch upgrades. Upgrade every node to a compatible patch level and validate subscriptions after the rolling change.