ドキュメントにあるサンプルのslonyconfigスクリプトを実行しようとしましたが、次のエラーが発生しました。
postgres$ /tmp/slonik_example.sh
<stdin>:8: PGRES_FATAL_ERROR load '$libdir/slony1_funcs'; - ERROR: could not access file "$libdir/slony1_funcs": No such file or directory
<stdin>:8: Error: the extension for the Slony-I C functions cannot be loaded in database 'dbname=my_primary Host=localhost user=warfish password=coalitions'
ただし、LIBDIR変数は正しく設定されています。
postgres$ ./pg_config
BINDIR = /opt/local/lib/postgresql90/bin
DOCDIR = /opt/local/share/doc/postgresql
HTMLDIR = /opt/local/share/doc/postgresql
INCLUDEDIR = /opt/local/include/postgresql90
PKGINCLUDEDIR = /opt/local/include/postgresql90
INCLUDEDIR-SERVER = /opt/local/include/postgresql90/server
LIBDIR = /opt/local/lib/postgresql90
そして、libが存在します:
ls -l /opt/local/lib/postgresql90/slony1_funcs.so
-rwxr-xr-x 1 root admin 34944 Feb 17 16:20 /opt/local/lib/postgresql90/slony1_funcs.so
スクリプトは次のとおりです。
cat /tmp/slonik_example.sh
#!/bin/sh
CLUSTERNAME=slony_example;
/opt/local/lib/postgresql90/bin/slonik <<_EOF_
define CLUSTERNAME slony_example;
cluster name = @CLUSTERNAME;
node 1 admin conninfo = 'dbname=my_primary Host=localhost user=user1 password=pw';
node 2 admin conninfo = 'dbname=my_rep Host=localhost user=user1 password=pw';
#--
# init the first node. Its id MUST be 1. This creates the schema # _$CLUSTERNAME containing all replication system specific database # objects.
#--
init cluster ( id=1, comment='Master Node');
#--
# Slony-I organizes tables into sets. The smallest unit a node can # subscribe is a set. The following commands create one set containing # all 4 pgbench tables. The master or Origin of the set is node 1.
#--
create set (id=1, Origin=1, comment='All pgbench tables');
set add table (set id=1, Origin=1, id=1, fully qualified name='public.pgbench_accounts', comment='accounts table');
set add table (set id=1, Origin=1, id=2, fully qualified name='public.pgbench_branches', comment='branches table');
set add table (set id=1, Origin=1, id=3, fully qualified name='public.pgbench_tellers', comment='tellers table');
set add table (set id=1, Origin=1, id=4, fully qualified name='public.pgbench_history', comment='history table');
#--
# Create the second node (the slave) tell the 2 nodes how to connect to Slony-I 2.1.1 Documentation 10 / 163
# each other and how they should listen for events.
#--
store node (id=2, comment = 'Slave node', event node=1);
store path (server = 1, client = 2, conninfo='dbname=my_primary Host=localhost user=user1 password=pw');
store path (server = 2, client = 1, conninfo='dbname=my_rep Host=localhost user=user1 password=pw');
_EOF_
Libが正しい場所にないか、$ libdirが正しく設定されていない可能性があることをドキュメントで読んでください。ただし、すべてが適切に配置されているように見えます。私は私が気づいていない何か他のものを逃していますか?
私の状況では、このエラーはSlonyがインストールされていないことが原因でしたクラスター内のすべてのマシンに。メインのホスト/マスターにSlonyをインストールし、必要なすべてのライブラリをインストールしましたが、クライアントにはSlonyをインストールする必要がありました(または、ライブラリ関数ファイルを$libdir
) 同じように。
私のデータベースslony1_funcs.soでは、PKGLIBDIRディレクトリにあります
PKGLIBDIR =/usr/lib64/pgsql
「PKGLIBDIRvsLIBDIR」に関する次の情報を見つけました。
"libdirは、ビルド時にリンク可能なライブラリ用であり、-lxxxとして渡すことができるものです。したがって、一般的な場所は/ usr/lib、/ usr/local/lib、または/ usr/local/pgsql/libです。pkglibdirは動的にロード可能なライブラリ用です "