spat

Redis-like In-Memory DB Embedded in Postgres

Overview

PackageVersionCategoryLicenseLanguage
spat0.1.0a4SIMAGPL-3.0C
IDExtensionBinLibLoadCreateTrustRelocSchema
9400spatNoYesNoYesNoYes-
Relatedredis_fdw redis pgmemcache mongo_fdw kafka_fdw documentdb documentdb_core documentdb_distributed

Alpha Stage!

Version

TypeRepoVersionPG VerPackageDeps
EXTPIGSTY0.1.0a41817161514spat-
RPMPGDG0.1.0a41817161514spat_$v-
DEBPIGSTY0.1.0a41817161514postgresql-$v-spat-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64PGDG MISSPGDG MISSPGDG MISSPGDG MISS
el8.aarch64PGDG MISSPGDG MISSPGDG MISSPGDG MISS
el9.x86_64PGDG MISSPGDG MISSPGDG MISSPGDG MISS
el9.aarch64PGDG MISSPGDG MISSPGDG MISSPGDG MISS
el10.x86_64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS
el10.aarch64PGDG MISSPGDG MISSPGDG MISSPGDG MISSPGDG MISS
d12.x86_64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS
d12.aarch64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS
d13.x86_64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS
d13.aarch64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS
u22.x86_64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS
u22.aarch64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS
u24.x86_64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY MISS
u24.aarch64PIGSTY MISSPIGSTY MISSPIGSTY MISSPIGSTY 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

spat: Redis-like In-Memory DB Embedded in Postgres

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

Last Modified 2026-03-12: add pg extension catalog (95749bf)