PostgreSQL 9.5 连接redis及其使用

2023-11-11 04:48

本文主要是介绍PostgreSQL 9.5 连接redis及其使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天有部分数据被同事放到redis上面了,需要同步过来。发现pg有连接redis插件,就参考德哥的文章(https://yq.aliyun.com/articles/14609)安装了一下,不过也遇到一些原文没有遇到问题。下面是我的安装过程:
首先redis_fdw有不同的branch,要根据自己的pg版本下载不同的branch
这里下载的是
redis_fdw-REL9_5_STABLE.zip

redis相关的库
hiredis-master.zip

解压后安装
cd hiredis
make
make PREFIX=/data/redis_fdw/hiredis_bin install

修改redis_fdw的Makefile

vi Makefile
# 末尾追加

LDFLAGS += -L/data/redis_fdw/hiredis_bin/lib
安装redis_fdw

source /home/pg9.5.2/.bash_profile
make USE_PGXS=1

参考德哥的博客安装的,死活报如下错误

redis_fdw.c: In function ‘redis_fdw_handler’:
redis_fdw.c:276: warning: assignment from incompatible pointer type
redis_fdw.c: In function ‘redisGetForeignPaths’:
redis_fdw.c:797: error: too many arguments to function ‘create_foreignscan_path’
redis_fdw.c: In function ‘redisGetForeignPlan’:
redis_fdw.c:833: error: too many arguments to function ‘make_foreignscan’
make: *** [redis_fdw.o] Error 1
反复换了各种版本redis_fdw的branch还是报错,其实上面的意思
上述的错误是指对应行的函数参数多了,我们删除几个,空值的参数
第一个函数删除一个NULL参数
第二个函数删除两个NIL参数
再次编译通过( 不要问我为什么,就是这么简单:)
make USE_PGXS=1 install

继续安装
[ pg9.5.2@postgres ~]$ psql -dpostgres -Upostgres -p5432
psql (9.5alpha2)
Type "help" for help.

postgres=# create extension redis_fdw;
ERROR:  could not load library "/opt/pgsql9.5.2/lib/redis_fdw.so": libhiredis.so.0.12: cannot open shared object file: No such file or directory

修改库地址
shared_preload_libraries = '/opt/pgsql9.5.2/lib/redis_fdw'   

启动还是报错
[ pg9.5.2@postgres pg9.5.2data]$ FATAL:  XX000: could not load library "/opt/pgsql9.5.2/lib/redis_fdw.so": libhiredis.so.0.12: cannot open shared object file: No such file or directory
LOCATION:  internal_load_library, dfmgr.c:239

把这些库考进来
cp * /opt/pgsql9.5.2/lib/  

启动依然报上面的错误
修改权限:chown pg9.5.2:pg9.5.2 *

启动成功
[ pg9.5.2@postgres pg9.5.2data]$ pg_ctl restart
pg_ctl: PID file "/data/pg9.5.2data/postmaster.pid" does not exist
Is server running?
starting server anyway
server starting
[ pg9.5.2@postgres pg9.5.2data]$ LOG:  00000: redirecting log output to logging collector process
HINT:  Future log output will appear in directory "pg_log".
LOCATION:  SysLogger_Start, syslogger.c:622


继续操作
[ pg9.5.2@postgres ~]$ psql -dpostgres -Upostgres -p5432
psql (9.5alpha2)
Type "help" for help.

postgres=# create extension redis_fdw;
CREATE EXTENSION
postgres=# CREATE SERVER redis_server
postgres-# FOREIGN DATA WRAPPER redis_fdw
postgres-# OPTIONS (address '127.0.0.1', port '6379');
CREATE SERVER
postgres=# CREATE FOREIGN TABLE redis_db0 (key text, val text)
postgres-# SERVER redis_server
postgres-# OPTIONS (database '0');
CREATE FOREIGN TABLE
postgres=# CREATE USER MAPPING FOR PUBLIC
postgres-# SERVER redis_server
postgres-# OPTIONS ();
ERROR:  syntax error at or near ")"
LINE 3: OPTIONS ();
^
如果是无密码就写成空,但password参数还是需要的
postgres=# CREATE USER MAPPING FOR PUBLIC
postgres-# SERVER redis_server
postgres-# OPTIONS (password '');
CREATE USER MAPPING
postgres=# CREATE FOREIGN TABLE myredishash (key text, val text[])
postgres-# SERVER redis_server
postgres-# OPTIONS (database '0', tabletype 'hash', tablekeyprefix 'pack_config:');
CREATE FOREIGN TABLE
postgres=# select * from myredishash limit 10;
key                    |                                                val

-------------------------------------------+---------------------------------------------------
------------------------------------------------
pack_config:2160070603:app:15158180750    | {1,"2016-06-08 15:46:23"}
pack_config:2160150608:app:18970345322    | {1,"2016-06-11 13:20:24"}
pack_config:2160150608:app:13777834990    | {1,"2016-06-16 15:09:18"}
pack_config:2160320622:app:13857143019    | {0,"2016-06-24 15:40:01"}
pack_config:2160070603:app:13575478184    | {1,"2016-06-04 19:23:06"}
pack_config:2160050527:app:13023698286    | {1,"2016-06-02 07:41:49"}
pack_config:2160150608:app:15382332310    | {4,"2016-06-09 08:15:12"}
pack_config:2160220616:wechat:13867456883 | {1,"2016-06-24 13:14:13",2,"2016-06-24 13:14:19",4
,"2016-06-24 13:14:30"}
pack_config:2160150608:app:13588335935    | {2,"2016-06-11 15:32:51",1,"2016-06-11 15:33:33"}
pack_config:2160150608:app:18755998181    | {1,"2016-06-16 09:53:42",2,"2016-06-16 09:53:45",3
,"2016-06-16 09:53:46",4,"2016-06-16 09:53:48"}
(10 rows)

postgres=# select * from myredishash where key like '%15158180750%';
key                   |            val            
----------------------------------------+---------------------------
pack_config:2160070603:app:15158180750 | {1,"2016-06-08 15:46:23"}
(1 row)


postgres=# select count(*) from myredishash    
;
count 
-------
10
(1 row)

参考文章:
https://yq.aliyun.com/articles/14609

转载地址:https://yq.aliyun.com/articles/57145

这篇关于PostgreSQL 9.5 连接redis及其使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/387643

相关文章

PostgreSQL数据库密码被遗忘时的操作步骤

《PostgreSQL数据库密码被遗忘时的操作步骤》密码遗忘是常见的用户问题,因此提供一种安全的遗忘密码找回机制是十分必要的,:本文主要介绍PostgreSQL数据库密码被遗忘时的操作步骤的相关资... 目录前言一、背景知识二、Windows环境下的解决步骤1. 找到PostgreSQL安装目录2. 修改p

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

PostgreSQL 默认隔离级别的设置

《PostgreSQL默认隔离级别的设置》PostgreSQL的默认事务隔离级别是读已提交,这是其事务处理系统的基础行为模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一 默认隔离级别概述1.1 默认设置1.2 各版本一致性二 读已提交的特性2.1 行为特征2.2

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ