Slony Error,Replication Postgres - Slonik:PGRES_FATAL_ERROR load'$ libdir / slony1_funcs.2.2.0

时间:2014-10-16 07:12:47

标签: windows postgresql replication suse slony

到目前为止,我已经成功地在一台计算机上完成了Postrong的Slony复制(Master和Slave都驻留在同一台计算机中,即localhost)。

我已经在Ubuntu 12.04,Suse Enterprise server 11和Windows中完成了。 我按照这个链接的示例步骤。 http://www.linuxjournal.com/article/7834?page=0,0this

我甚至能够在两个不同的Windows计算机主机ip之间执行此步骤:192.168.0.3 Slave ip 192.168.0.8)

但是当我在Windows和Suse( Master:Windows(192.168.0.3) Slave:Suse(192.168.0.9)之间尝试Slony Replication时 当我运行 slonik C:\ Slony \ mtscript.txt 时,我收到此错误

C:\ Slony \ mtscript.txt:8:PGRES_FATAL_ERROR load' $ libdir / slony1_funcs.2.2.0&#39 ;; - 错误:无法访问文件" $ libdir / slony1_funcs.2.2.0":没有这样的文件或目录

C:\ Slony \ mtscript.txt:8:错误:无法在数据库中加载Slony-I C函数的扩展名' dbname = repdb_slave host = 192.168.0.9 port = 5432 user = postgres密码= root'

当我搜索这个错误时,我发现了很多,我刚刚通过破坏命令来了解./pg_config我发现了,

Windows中的

(1) slony1_funcs.2.2.0.dll 位于 LIBDIR = C:/PROGRA~2/POSTGR~1/9.3/lib (即C :\ Program Files(x86)\ PostgreSQL \ 9.3 \ lib)

(2)并且在Suse slony1_funcs.2.2.0.so 位于 PKGLIBDIR = /opt/PostgreSQL/9.3/lib/postgresql

编辑:

我的脚本文件:mtscript.txt

cluster name = repdb_cluster_suse;
node 1 admin conninfo = 'dbname=repdb host=192.168.0.3 port=5432 user=postgres password=root';
node 2 admin conninfo = 'dbname=repdb_slave host=192.168.0.9 port=5432 user=postgres password=root';
init cluster (id = 1, comment = 'Node 1');
create set (id = 1, origin = 1,comment = 'contact table');
set add table (set id = 1, origin = 1, id = 1,full qualified name = 'public.contact',comment = 'Table contact');
set add sequence (set id = 1, origin = 1, id = 2,full qualified name = 'public.contact_seq',comment = 'Sequence contact_seq');
store node (id = 2, comment = 'Node 2',event node=1);
store path (server = 1, client = 2,conninfo = 'dbname=repdb host=192.168.0.3 port=5432 user=postgres password=root');
store path (server = 2, client = 1,  conninfo = 'dbname=repdb_slave host=192.168.0.9 port=5432 user=postgres password=root');
store listen (origin = 1, provider = 1, receiver = 2);
store listen (origin = 2, provider = 2, receiver = 1);

我安装了相同版本的Postgres(版本9.3.5.1)和slony(2.2.0-1)。(均来自here 32位版本)

Windows Postgres安装目录是C:\ Program Files(x86)\ PostgreSQL \ 9.3

suse Postgres安装目录是/opt/PostgreSQL/9.3/bin

那么如何解决这个错误?如何在windows和linux之间执行Slony复制(suse)?

任何帮助都值得赞赏。

提前致谢

2 个答案:

答案 0 :(得分:1)

好的 - 您的设置脚本没有明显错误,我们知道它适用于Windows< => Windows和Linux< => Linux。

从你的Windows机器上,你可以尝试类似的东西:

C:> psql -h 192.168.0.9 -U postgres -d repdb_slave
postgres# load 'foo';
postgres# load 'slony1_funcs.2.2.0';

第一个应该给出错误,第二个应该有效。如果没有,请再次检查pg_config设置和文件位置和权限。

另外 - 检查PostgreSQL服务器日志。如果您没有在其中看到第一个错误,请确保使用数据库和用户名记录错误,然后重试。然后你可以再次尝试slony,并检查它是否正在做我们认为的。

如果第二个“加载”确实有效,那么它本身就可能是一个错误(与行尾或类似行为有关)。他们在http://slony.info上提到了邮件列表,我会在那里解决这个问题,并提供这个问题的链接。

必须有很多人进行过跨平台复制,因此奇怪的是,Slony中存在如此明显的错误。我无法看到我们失踪的东西。

答案 1 :(得分:1)

感谢Richard Huxton,我发现了我的问题,根据他的说法加载' slony1_funcs.2.2.0'在Windows和Linux中给我一个错误然后我意识到我的Slony版本是不同的,在Windows中,版本是2.2.0而在linux中它是2.2.2,(在Windows的Postgres 9.3的Stackbuilder中获得了不同的Slony版本) linux)

所以我从linux上卸载Slony 2.2.2并手动构建并安装了适用于Suse Linux的Slony 2.2.0。

现在Windows< ==> Linux Slony Replication工作得很好。