Symfoware

Symfowareについての考察blog

PostgreSQL拡張redis_fdwの使い方

redis_fdwをインストールしてみました。
PGXNでredis_fdwをインストールする

使い方を調べてみます。
なお、対象はArch LinuxにインストールしたPostgreSQL 9.1.3です。




インストール直後の注意点



redis_fdwは、create extensionコマンドで有効にするのですが、
インストール直後だと、こんなエラーになります。


# create extension redis_fdw;
ERROR: could not load library "/usr/lib/postgresql/redis_fdw.so": libhiredis.so.0.10: cannot open shared object file: No such file or directory





調べてみると、どうやらredis_fdwが依存しているライブラリ、hiredisのインストール時、
lddconfigが行われないため、こんなエラーになるようです。
error while loading shared libraries: libhiredis.so.0.10: cannot open shared object file: No such file or directory


コマンドで、「lddconfig」を実行してライブラリをロードしなおすか、
OSを再起動してやれば認識されます。








redis_fdwテーブルを作成



http://pgxn.org/dist/redis_fdw/
ここを参考にredis_fdwを使ってみます。


postgresユーザーになって、psqlを起動。


[root@(none) ~]# su - postgres
[postgres@(none) ~]$ psql
psql (9.1.3)
Type "help" for help.




「sample」というデータベースを作成し、sampleに切り替えます。


postgres=# create database sample;
CREATE DATABASE
postgres=# \c sample;
You are now connected to database "sample" as user "postgres".





create extensionコマンドを実行し、redis_fdwを有効にします。


sample=# create extension redis_fdw;
CREATE EXTENSION





後はサンプル通り、CREATE SERVERでredisサーバーを指定。
CREATE FOREIGN TABLEで、テーブル名とredisサーバーの関連付け。
CREATE USER MAPPINGで閲覧できるようにします。


  1. CREATE SERVER redis_server
  2.     FOREIGN DATA WRAPPER redis_fdw
  3.     OPTIONS (address '127.0.0.1', port '6379');
  4. CREATE FOREIGN TABLE redis_db0 (key text, value text)
  5.     SERVER redis_server
  6.     OPTIONS (database '0');
  7. CREATE USER MAPPING FOR PUBLIC
  8.     SERVER redis_server;





実行内容は以下のとおり。


sample=# CREATE SERVER redis_server
sample-# FOREIGN DATA WRAPPER redis_fdw
sample-# OPTIONS (address '127.0.0.1', port '6379');
CREATE SERVER

sample=# CREATE FOREIGN TABLE redis_db0 (key text, value text)
sample-# SERVER redis_server
sample-# OPTIONS (database '0');
CREATE FOREIGN TABLE

sample=# CREATE USER MAPPING FOR PUBLIC
sample-# SERVER redis_server;
CREATE USER MAPPING





これで、PostgreSQLからredis_db0というテーブル名でRedisにアクセスできるようになります。






Redisへのデータ登録



redis-cliコマンドを使用してRedisにデータを登録します。
※ちなみに、PostgreSQL経由でRedisへのデータ登録は行えないようでした。

以下、2つのデータを登録します。


key:'test_key', value:'redis_value'
key:'redis_key', value:'redis_only_value'




実際のコマンドはこのようになります。


# redis-cli
redis 127.0.0.1:6379> set test_key redis_value
OK
redis 127.0.0.1:6379> set redis_key redis_only_value
OK





登録できたか確認してみます。


redis 127.0.0.1:6379> mget test_key redis_key
1) "redis_value"
2) "redis_only_value"





※Redisのコマンドはこちらを参考
Redis コマンド一覧






PostgreSQLでRedisデータの検索



psqlで、作成したredis_db0を検索してみます。


sample=# select * from redis_db0;
    key    |     value    
-----------+------------------
redis_key | redis_only_value
test_key | redis_value
(2 rows)




ちゃんとデータが取得できてます。



次は、PostgreSQLにテーブルを作成してデータを登録します。


sample=# create table t(key text, value text);
CREATE TABLE

sample=# insert into t(key,value) values ('test_key','postgres_value');
INSERT 0 1

sample=# insert into t(key,value) values ('postgres_key','postgres_only_value');
INSERT 0 1

sample=# select * from t;
     key     |        value        
--------------+---------------------
test_key     | postgres_value
postgres_key | postgres_only_value
(2 rows)







redisのデータと結合して検索も可能でした。


sample=# select * from redis_db0,t where redis_db0.key = t.key;
key    |    value    | key    |     value    
----------+-------------+----------+----------------
test_key | redis_value | test_key | postgres_value
(1 row)












【参考URL】

http://pgxn.org/dist/redis_fdw/

Postgres 9.1 foreign data wrapper interface
関連記事

テーマ:データベース - ジャンル:コンピュータ

  1. 2012/05/27(日) 15:39:07|
  2. PostgreSQL
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
前のページ 次のページ