spat

在PG中嵌入Redis风格的内存数据库

概览

扩展包名版本分类许可证语言
spat0.1.0a4SIMAGPL-3.0C
ID扩展名BinLibLoadCreateTrustReloc模式
9400spat-
相关扩展redis_fdw redis pgmemcache mongo_fdw kafka_fdw documentdb documentdb_core documentdb_distributed

Alpha Stage!

版本

类型仓库版本PG 大版本包名依赖
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

构建

您可以使用 pig build 命令构建 spat 扩展的 RPM / DEB 包:

pig build pkg spat         # 构建 RPM / DEB 包

安装

您可以直接安装 spat 扩展包的预置二进制包,首先确保 PGDGPIGSTY 仓库已经添加并启用:

pig repo add pgsql -u          # 添加仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

pig install spat;          # 当前活跃 PG 版本安装
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 spat;

用法

spat: 嵌入 Postgres 的类 Redis 内存数据库

嵌入在 PostgreSQL 共享内存中的内存键值数据结构服务器。键为字符串;值可以是字符串、列表、集合或哈希。

启用

CREATE EXTENSION spat;

字符串

SELECT SPSET('key', 'value');
SELECT SPGET('key');              -- 'value'

-- 带 TTL
SELECT SPSET('temp', 'data', ttl => interval '5 minutes');

-- 将任意类型存储为文本
SELECT SPSET('config', '{"a": 1}'::jsonb);
SELECT SPGET('config')::text::jsonb;

集合

SELECT SADD('myset', 'elem1');
SELECT SADD('myset', 'elem2');
SELECT SISMEMBER('myset', 'elem1');  -- true
SELECT SCARD('myset');               -- 2
SELECT SREM('myset', 'elem1');       -- 1

列表

SELECT LPUSH('mylist', 'a');
SELECT LPUSH('mylist', 'b');
SELECT LPOP('mylist');     -- 'b'(后进先出)
SELECT LLEN('mylist');     -- 1

哈希

SELECT HSET('myhash', 'field1', 'Hello');
SELECT HGET('myhash', 'field1');  -- 'Hello'

通用操作

SELECT SPTYPE('key');           -- 'string'、'list'、'set' 或 'hash'
SELECT DEL('key');              -- 如果删除则为 true
SELECT TTL('key');              -- 返回 TTL 间隔
SELECT GETEXPIREAT('key');      -- 返回过期时间戳
SELECT SP_DB_NITEMS();          -- 条目数
SELECT SP_DB_SIZE();            -- 友好的大小显示

多数据库

SET spat.db = 'db1';             -- 切换到数据库 'db1'
SET spat.db = 'spat-default';   -- 切换回默认

重要说明

  • 数据存储在 PostgreSQL 共享内存中,非持久化 —— 重启后丢失
  • 操作非事务性 —— ROLLBACK 不会撤销 spat 变更
  • 变更立即可见于所有会话(无 MVCC 隔离)
  • 按键锁确保并发写入安全

最后修改 2026-03-14: update extension metadata (953cbd0)