Skip to content

An experimental PostgreSQL foreign data wrapper for Redis

Notifications You must be signed in to change notification settings

engobi/redis_fdw

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Redis FDW for PostgreSQL 9.1+
==============================

This PostgreSQL extension implements a Foreign Data Wrapper (FDW) for
the Redis key/value database: http://redis.io/

This code is experimental, and largely intended as a pet project for me
to experiment with and learn about FDWs in PostgreSQL.

By all means use it, but do so entirely at your own risk! You have been
warned!

Building
--------

To build the code, you need the hiredis C interface to Redis installed 
on your system. You can checkout the hiredis from GitHub:
https://github.com/antirez/hiredis

Once that's done, the extension can be built with:

PATH=/usr/local/pgsql91/bin/:$PATH make USE_PGXS=1 make
sudo PATH=/usr/local/pgsql91/bin/:$PATH make USE_PGXS=1 install

(assuming you have PostgreSQL 9.1 in /usr/local/pgsql91).

I've tested on Mac OS X 10.6 only, but other *nix's should also work.
I haven't tested on Windows, but the code should be good on MinGW.

Limitations
-----------

- There's no such thing as a cursor in Redis, or MVCC, which leaves us
  with no way to atomically query the database for the available keys
  and then fetch each value. So, we get a list of keys to begin with,
  and then fetch whatever records still exist as we build the tuples.

- We can only push down a single qual to Redis, which must use the 
  TEXTEQ operator, and must be on the 'key' column.

- There is currently no support for non-scalar datatypes in Redis
  such as lists.

Usage
-----

The following parameters can be set on a Redis foreign server:

address:	The address or hostname of the Redis server.
	 	Default: 127.0.0.1

port:		The port number on which the Redis server is listening.
     		Default: 6379

The following parameter can be set on a Redis foreign table:

database:	The numeric ID of the Redis database to query.
	  	Default: 0

The following parameter can be set on a user mapping for a Redis
foreign server:

password:	The password to authenticate to the Redis server with.
		Default: <none>

Example
-------

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

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

CREATE USER MAPPING FOR PUBLIC
	SERVER redis_server
	OPTIONS (password 'secret');

-- 
Dave Page
[email protected]

About

An experimental PostgreSQL foreign data wrapper for Redis

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages