redis_fdw

1. 概述

redis_fdw 实现PostgreSQL与Redis键值数据库的连接,支持SELECT、INSERT、UPDATE、DELETE等操作,适用于PostgreSQL 10+及Redis 6.0左右版本,可处理哈希、列表等多种数据类型。在 PostgreSQL 和 Oracle 兼容模式下均可正常工作。

2. 安装

源码安装环境为 Ubuntu 24.04(x86_64),环境中已经安装了IvorySQL5及以上版本,安装路径为/usr/ivory-5。

2.1. 源码安装

# 安装 Hiredis 库
wget https://github.com/redis/hiredis/archive/refs/tags/v1.3.0.tar.gz
tar xzvf v1.3.0.tar.gz
cd hiredis-1.3.0
make
sudo make install
sudo ldconfig

# 安装本地 Redis 服务
sudo apt update
sudo apt install -y redis-server

# 本地Redis服务默认开启,127.0.0.1:6379

# 使用 redis-cli 命令 创建一个管理员用户:(临时创建的用户重启 Redis 会丢失)
# 用户:highgo,密码:Admin@123,启用,全键全命令
ACL SETUSER highgo on >Admin@123 ~* +@all

# 下载 redis_fdw 源码包
git clone https://github.com/pg-redis-fdw/redis_fdw.git -b REL_18_STABLE
cd redis_fdw

# 编译安装 redis_fdw 插件
make PG_CONFIG=/usr/ivory-5/bin/pg_config
sudo make install PG_CONFIG=/usr/ivory-5/bin/pg_config
如果出现找不到xlocale.h的错误,需要手动修改 /usr/ivory-5/include/postgresql/server/pg_config.h 删除或者注释掉 #define HAVE_XLOCALE_H 1 这一行

2.2. 创建Extension

postgres=# create extension redis_fdw;
CREATE EXTENSION

3. 使用

// 创建外部服务器
// Create a foreign server with appropriate configuration
postgres=# CREATE SERVER redis_server
postgres-#     FOREIGN DATA WRAPPER redis_fdw
postgres-#     OPTIONS ( address '127.0.0.1', port '6379');
CREATE SERVER
// 创建用户映射
// User mapping
postgres=# CREATE USER MAPPING FOR highgo
postgres-#  SERVER redis_server
postgres-#  OPTIONS (password 'Admin@123');
CREATE USER MAPPING
// 创建一个简单表
postgres=# CREATE FOREIGN TABLE redis_db0 (
postgres(#   key text,
postgres(#   val text
postgres(# )
postgres-# SERVER redis_server
postgres-# OPTIONS (
postgres(#   database '0'
postgres(# );
CREATE FOREIGN TABLE
// 插入数据
postgres=# insert into redis_db0 values('k2', 'v2');
INSERT 0 1
// 读取数据
postgres=# select * from redis_db0;
 key | val
-----+-----
 k2  | v2
(1 row)