LoginSignup
7
6

More than 5 years have passed since last update.

redis_fdwのインストールから簡単な操作まで

Posted at

PostgreSQL9.5にredis_fdwを導入し、Redis上の外部テーブルに対して簡単な操作を試してみます。
今回の手順では、PostgreSQL9.5とRedisがインストール済の環境を前提にしています。

Hiredisのインストール

redis_fdwを導入するには、RedisのCクライアントライブラリであるHiredisをインストールする必要があります。

$ git clone https://github.com/redis/hiredis.git
$ cd hiredis/
$ make
$ su
# make install
# echo "/usr/local/lib" > /etc/ld.so.conf.d/hiredis.conf
# ldconfig
# ldconfig -p | grep hiredis
# exit

redis_fdwのインストール

PostgreSQLのバージョンが9.5の場合は、9.5用のブランチ(REL9_5_STABLE)のredis_fdwを導入する必要があります。

$ git clone https://github.com/pg-redis-fdw/redis_fdw.git
$ cd redis_fdw
$ git checkout -b REL9_5_STABLE origin/REL9_5_STABLE
$ make USE_PGXS=1 PG_CONFIG=~/pgsql/9.5/pgsql-9.5.2/bin/pg_config
$ make USE_PGXS=1 PG_CONFIG=~/pgsql/9.5/pgsql-9.5.2/bin/pg_config install
  • PostgreSQLのbinディレクトリにPATHが通っている場合は、PG_CONFIGの指定は不要です。
  • PG_CONFIGを指定する場合、~/pgsql/9.5/pgsql-9.5.2の部分はPostgreSQLインストール先のパスで置き換えます。

redis_fdwの登録と外部テーブルの作成

PostgreSQLとRedisを起動してから、psqlでPostgreSQLにログインし、キーとバリューを保持する簡単な外部テーブルを作成します。

-- redis_fdwをPostgreSQLに登録
CREATE EXTENSION redis_fdw;

-- Redisの外部サーバを定義 (Redisのアドレスとポート番号をオプションで指定)
CREATE SERVER redis_server
FOREIGN DATA WRAPPER redis_fdw
OPTIONS (address '127.0.0.1', port '6379');

-- Redis上の外部テーブルを作成
CREATE FOREIGN TABLE redis_db0 (key text, val text)
SERVER redis_server
OPTIONS (database '0');

-- Redisの外部サーバのユーザマップを定義
CREATE USER MAPPING FOR PUBLIC
SERVER redis_server
OPTIONS (password 'secret');

Redis上の外部テーブルの操作

Redis上の外部テーブルに対して、簡単なSQLが想定どおりに動作することを確認します。

-- PostgreSQL9.3以降では、外部テーブルに対してINSERTなどの更新系SQLが実行可能
-- 10件のデータを挿入
INSERT INTO redis_db0
SELECT 'key' || num::TEXT, 'val' || num::TEXT
FROM generate_series(1, 10) num;

-- 検索条件どおりに1件検索できることを確認
SELECT * FROM redis_db0 WHERE key = 'key3';
 key  | val  
------+------
 key3 | val3
(1 row)

-- 1件のデータを更新
UPDATE redis_db0 SET val = 'val99' WHERE key = 'key9';

SELECT * FROM redis_db0 WHERE key = 'key9';
 key  |  val  
------+-------
 key9 | val99
(1 row)

-- 9件のデータを削除
DELETE FROM redis_db0 WHERE key <> 'key7';
DELETE 9

SELECT * FROM redis_db0 WHERE key = 'key9';
 key | val 
-----+-----
(0 rows)

また、Redisに直接接続して、上記操作で残った外部テーブルのデータ1件が見えることを確認します。

$ redis-cli KEYS "key*"
1) "key7"
7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6