spat
Redis-like In-Memory DB Embedded in Postgres
Repository
Florents-Tselai/spat
https://github.com/Florents-Tselai/spat
Source
spat-0.1.0a4.tar.gz
spat-0.1.0a4.tar.gz
Overview
| Package | Version | Category | License | Language |
|---|---|---|---|---|
spat | 0.1.0a4 | SIM | AGPL-3.0 | C |
| ID | Extension | Bin | Lib | Load | Create | Trust | Reloc | Schema |
|---|---|---|---|---|---|---|---|---|
| 9400 | spat | No | Yes | No | Yes | No | Yes | - |
| Related | redis_fdw redis pgmemcache mongo_fdw kafka_fdw documentdb documentdb_core documentdb_distributed |
|---|
Alpha Stage!
Version
| Type | Repo | Version | PG Ver | Package | Deps |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.1.0a4 | 1817161514 | spat | - |
| RPM | PGDG | 0.1.0a4 | 1817161514 | spat_$v | - |
| DEB | PIGSTY | 0.1.0a4 | 1817161514 | postgresql-$v-spat | - |
| OS / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | PGDG MISS | PIGSTY 0.1.0 el8.x86_64.pg17 : spat_17 spat_17-0.1.0a4-1PIGSTY.el8.x86_64.rpm
| PGDG MISS | PGDG MISS | PGDG MISS |
| el8.aarch64 | PGDG MISS | PIGSTY 0.1.0 el8.aarch64.pg17 : spat_17 spat_17-0.1.0a4-1PIGSTY.el8.aarch64.rpm
| PGDG MISS | PGDG MISS | PGDG MISS |
| el9.x86_64 | PGDG MISS | PIGSTY 0.1.0 el9.x86_64.pg17 : spat_17 spat_17-0.1.0a4-1PIGSTY.el9.x86_64.rpm
| PGDG MISS | PGDG MISS | PGDG MISS |
| el9.aarch64 | PGDG MISS | PIGSTY 0.1.0 el9.aarch64.pg17 : spat_17 spat_17-0.1.0a4-1PIGSTY.el9.aarch64.rpm
| PGDG MISS | PGDG MISS | PGDG MISS |
| el10.x86_64 | PGDG MISS | PGDG MISS | PGDG MISS | PGDG MISS | PGDG MISS |
| el10.aarch64 | PGDG MISS | PGDG MISS | PGDG MISS | PGDG MISS | PGDG MISS |
| d12.x86_64 | PIGSTY MISS | PIGSTY 0.1.0 d12.x86_64.pg17 : postgresql-17-spat postgresql-17-spat_0.1.0a4-1PIGSTY~bookworm_amd64.deb
| PIGSTY MISS | PIGSTY MISS | PIGSTY MISS |
| d12.aarch64 | PIGSTY MISS | PIGSTY 0.1.0 d12.aarch64.pg17 : postgresql-17-spat postgresql-17-spat_0.1.0a4-1PIGSTY~bookworm_arm64.deb
| PIGSTY MISS | PIGSTY MISS | PIGSTY MISS |
| d13.x86_64 | PIGSTY MISS | PIGSTY MISS | PIGSTY MISS | PIGSTY MISS | PIGSTY MISS |
| d13.aarch64 | PIGSTY MISS | PIGSTY MISS | PIGSTY MISS | PIGSTY MISS | PIGSTY MISS |
| u22.x86_64 | PIGSTY MISS | PIGSTY 0.1.0 u22.x86_64.pg17 : postgresql-17-spat postgresql-17-spat_0.1.0a4-1PIGSTY~jammy_amd64.deb
| PIGSTY MISS | PIGSTY MISS | PIGSTY MISS |
| u22.aarch64 | PIGSTY MISS | PIGSTY 0.1.0 u22.aarch64.pg17 : postgresql-17-spat postgresql-17-spat_0.1.0a4-1PIGSTY~jammy_arm64.deb
| PIGSTY MISS | PIGSTY MISS | PIGSTY MISS |
| u24.x86_64 | PIGSTY MISS | PIGSTY 0.1.0 u24.x86_64.pg17 : postgresql-17-spat postgresql-17-spat_0.1.0a4-1PIGSTY~noble_amd64.deb
| PIGSTY MISS | PIGSTY MISS | PIGSTY MISS |
| u24.aarch64 | PIGSTY MISS | PIGSTY 0.1.0 u24.aarch64.pg17 : postgresql-17-spat postgresql-17-spat_0.1.0a4-1PIGSTY~noble_arm64.deb
| PIGSTY MISS | PIGSTY MISS | PIGSTY MISS |
Build
You can build the RPM / DEB packages for spat using pig build:
pig build pkg spat # build RPM / DEB packages
Install
You can install spat directly. First, make sure the PGDG and PIGSTY repositories are added and enabled:
pig repo add pgsql -u # Add repo and update cache
Install the extension using pig or apt/yum/dnf:
pig install spat; # Install for current active PG version
pig ext install -y spat -v 17 # PG 17
dnf install -y spat_17 # PG 17
apt install -y postgresql-17-spat # PG 17
Create Extension:
CREATE EXTENSION spat;
Usage
An in-memory key-value data structure server embedded in PostgreSQL shared memory. Keys are strings; values can be strings, lists, sets, or hashes.
Enabling
CREATE EXTENSION spat;
Strings
SELECT SPSET('key', 'value');
SELECT SPGET('key'); -- 'value'
-- With TTL
SELECT SPSET('temp', 'data', ttl => interval '5 minutes');
-- Store any type as text
SELECT SPSET('config', '{"a": 1}'::jsonb);
SELECT SPGET('config')::text::jsonb;
Sets
SELECT SADD('myset', 'elem1');
SELECT SADD('myset', 'elem2');
SELECT SISMEMBER('myset', 'elem1'); -- true
SELECT SCARD('myset'); -- 2
SELECT SREM('myset', 'elem1'); -- 1
Lists
SELECT LPUSH('mylist', 'a');
SELECT LPUSH('mylist', 'b');
SELECT LPOP('mylist'); -- 'b' (LIFO)
SELECT LLEN('mylist'); -- 1
Hashes
SELECT HSET('myhash', 'field1', 'Hello');
SELECT HGET('myhash', 'field1'); -- 'Hello'
Generic Operations
SELECT SPTYPE('key'); -- 'string', 'list', 'set', or 'hash'
SELECT DEL('key'); -- true if removed
SELECT TTL('key'); -- returns TTL interval
SELECT GETEXPIREAT('key'); -- returns expiration timestamp
SELECT SP_DB_NITEMS(); -- number of entries
SELECT SP_DB_SIZE(); -- human-friendly size
Multiple Databases
SET spat.db = 'db1'; -- switch to database 'db1'
SET spat.db = 'spat-default'; -- switch back to default
Important Notes
- Data is stored in PostgreSQL shared memory and is not durable – lost on restart
- Operations are not transactional – ROLLBACK does not undo spat changes
- Changes are immediately visible across all sessions (no MVCC isolation)
- Per-key locks ensure concurrent write safety
Feedback
Was this page helpful?
Thanks for the feedback! Please let us know how we can improve.
Sorry to hear that. Please let us know how we can improve.