PostgreSQL9.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
相關文章
- 使用telnet連線redisRedis
- windwos 使用telnet 連線 redisRedis
- Python連線Redis連線配置PythonRedis
- 18 Redis 連線Redis
- Jedis使用連線池操作redis叢集Redis
- MySQL表連線及其優化MySql優化
- Laravel redis 連不同的連線LaravelRedis
- Redis學習記錄(二)--使用Jedis連線Redis
- Python連線RedisPythonRedis
- 資料庫的連線、索引和Redis的五種資料型別及其操作命令、使用場景資料庫索引Redis資料型別
- 如何在 Go 語言中使用 Redis 連線池GoRedis
- Redis 可以讓工具連線Redis
- Redis客戶端連線Redis客戶端
- go~連線redis的方法GoRedis
- redis學習(1)python連線redisRedisPython
- 【Azure Redis 快取 Azure Cache For Redis】Redis連線池Redis快取
- Oracle中表的連線及其調整(一)Oracle
- Oracle中表的連線及其調整(二)Oracle
- 【Azure Redis 快取】示例使用 redisson-spring-boot-starter 連線/使用 Azure Redis 服務Redis快取Springboot
- ServiceStack.Redis的原始碼分析(連線與連線池)Redis原始碼
- 教你如何用node連線redisRedis
- java連線Redis的工具類JavaRedis
- python連線redis測試PythonRedis
- 單機最大的TCP連線數及其修改TCP
- 為什麼使用Redis及其產品定位Redis
- golang開發:類庫篇(二) Redis連線池的使用GolangRedis
- docker 安裝redis 以及配置連線DockerRedis
- java操作redis叢集連線池JavaRedis
- Redis 可以讓工具連線 小技巧Redis
- day40-Python連線RedisPythonRedis
- 實現一個redis連線池Redis
- mysql、redis 客戶端連線池MySqlRedis客戶端
- node.js 連線外網redisNode.jsRedis
- Redis筆記2:Jedis連線池Redis筆記
- Redis連線超時排查實錄Redis
- 長連線和短連線的使用
- 動態IPvps的介紹及其連線方法
- proxool連線池如何使用SSL方式連線?