AMQP for PostgreSQL導入(失敗)
SkytoolsのPgQやらいろいろ調査していたんだけど、導入で躓いたので、とりあえずスルーして
他のものを調査して、これヨサゲじゃーんを発見。
AMQPについては、説明がちゃんとできないダメな人なので、以下を参照すると良いと思います。
http://labs.gree.jp/blog/2010/06/262/:AMQPによるメッセージング
以下を見て導入調査を決断。
http://lethargy.org/~jesus/writes/asynchronous-postgresql-candy:Asynchronous PostgreSQL Candy
http://lethargy.org/~jesus/writes/amqp-for-postgresql:AMQP for PostgreSQL
http://www.slideshare.net/postwait/postgresql-meet-your-queue
上記は、ちゃんとRabbitMQのまとめページにいてました。
http://www.rabbitmq.com/how.html
めでたくPostgreSQL 9.0がリリースされたので、そちらをインストールして調査。
環境はCentOS5.5(KVM)
PostgreSQLはソースコンパイルしていれてます。configureは基本こんな感じ。
./configure --prefix=/usr/local/pgsql/9.0.0
あとは、初期化等を以下で実施。
/usr/local/pgsql/9.0.0/bin/initdb -D /home/postgres/9.0.0/data --encoding=UTF-8 --no-locale
起動は、
contrib/start-script/linux を /etc/rc.d/init.d/postgresにして、
<< su - $PGUSER -c "$DAEMON -D '$PGDATA' &" >>$PGLOG 2>&1 >> su - $PGUSER -c "$DAEMON -i -D '$PGDATA' &" >>$PGLOG 2>&1
で起動に-iオプションを付与した形。pg_hba.confとかpostgresql.confも適切に設定。
でここからが、pg_amqpの導入。
まず、ダウンロード
svn co https://labs.omniti.com/pgtreats/trunk/contrib/pg_amqp/
でダウンロードしたものをpostgresql9.0のcontribの中に移動
cp pg_amqp postgresql-9.0.0/contrib/
で、ちょっとはまったのがここ。
このままmake USE_PGXS=1しても怒られます。
make: pg_config: コマンドが見つかりませんでした make: *** ターゲットがありません. 中止.
pg_amqpのMakefileを見ると、
MODULE_big = pg_amqp OBJS = pg_amqp.o \ librabbitmq/amqp_api.o librabbitmq/amqp_connection.o librabbitmq/amqp_debug.o \ librabbitmq/amqp_framing.o librabbitmq/amqp_mem.o librabbitmq/amqp_socket.o \ librabbitmq/amqp_table.o DOCS = README.pg_amqp DATA = uninstall_pg_amqp.sql pg_amqp.sql ifdef USE_PGXS PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS) else subdir = contrib/pg_amqp top_builddir = ../.. include $(top_builddir)/src/Makefile.global include $(top_srcdir)/contrib/contrib-global.mk endif
となっていて、PG_CONFIGの部分でpg_configとなっている。
exportとかaliasをつくった方がいいんだろうけど、とりあえず、コンパイルしたかったので、絶対パスに変更して実施する。
<< PG_CONFIG = pg_config >> PG_CONFIG = /usr/local/pgsql/9.0.0/bin/pg_config
で、あとは、記載の通り、
make USE_PGXS=1 make install
んで、postgresql.confに
shared_preload_libraries = 'pg_amqp.so'
を追記してpostgresqlをrestart!! おやプロセスが起動しない。。。
log見ると、
FATAL: could not load library "/usr/local/pgsql/9.0.0/lib/pg_amqp.so": /usr/local/pgsql/9 .0.0/lib/pg_amqp.so: undefined symbol: pthread_key_create
ん??どういうこと?thread-safeなのかだめなのか?と思い、普段はしないけど、PostgreSQL自体のconfigureを変更してみても結果は同様。。。
./configure --prefix=/usr/local/pgsql/9.0.0 --disable-thread-safety
何かご存知の方いましたら、ご教授下さい。
本家の方にも問い合わせはしてみましたが。。。(案外恥ずかしいことだったりするんでしょうか。。。)