试图在文档中运行示例Slony Config脚本,但会遇到以下错误:

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_ 

在文档中阅读可能不是正确的位置或$ libdir的设置,但一切似乎都已经到位。我是否缺少我不知道的其他东西?

有帮助吗?

解决方案

在我的情况下,这个错误是由于未安装的slony引起的 在集群中的每台机器上. 。我已经安装了Slony,并且在主要主机/主人上安装了所有必要的LIB $libdir)。

其他提示

在我的数据库slony1_funcs.中,它在pkglibdir目录中

pkglibdir =/usr/lib64/pgsql

我发现了有关“ pkglibdir vs libdir”的信息:

" libdir用于构建时间可链接的库,您可能想要以-LXXX的方式传递的任何内容。因此,典型的位置是/usr/lib,/usr/local/lib或/usr/local/pgsql/lib。 Pkglibdir适用于动态加载的库"

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top