Windows Slony错误,复制Postgres-Slonik:PGRES_致命错误加载'$libdir/slony1_函数2.2.0

Windows Slony错误,复制Postgres-Slonik:PGRES_致命错误加载'$libdir/slony1_函数2.2.0,windows,postgresql,replication,suse,slony,Windows,Postgresql,Replication,Suse,Slony,到目前为止,我已经在一台计算机上成功地完成了Postrong的Slony复制(主计算机和从计算机都驻留在同一台计算机上,即localhost) 我已经在Ubuntu 12.04、Suse Enterprise server 11和Windows中完成了。 我遵循了此链接中的示例步骤和 我甚至能够在两个不同的windows计算机主ip:192.168.0.3从ip 192.168.0.8)之间执行此步骤 但是当我尝试在Windows和Suse之间进行缓慢复制时(主:Windows(192.168.

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

我已经在Ubuntu 12.04、Suse Enterprise server 11和Windows中完成了。 我遵循了此链接中的示例步骤

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

但是当我尝试在Windows和Suse之间进行缓慢复制时(主:Windows(192.168.0.3)从:Suse(192.168.0.9)) 当我运行slonik C:\Slony\mtscript.txt时,我得到了这个错误

C:\Slony\mtscript.txt:8:PGRES_FATAL_ERROR load'$libdir/slony1_funcs.2.2.0'-错误:无法访问文件“$libdir/slony1_funcs.2.2.0”:没有此类文件或目录

C:\Slony\mtscript.txt:8:错误:无法在数据库'dbname=repdb\u slave host=192.168.0.9 port=5432 user=postgres password=root'中加载Slony-ic函数的扩展。

当我在谷歌上搜索这个错误时,我发现了很多,我只是知道通过破坏命令。/pg_config我发现了

(1) 在windows中,slony1\u funcs.2.2.0.dll位于LIBDIR=C:/PROGRA~2/POSTGR~1/9.3/lib(即C:\Program Files(x86)\PostgreSQL\9.3\lib)

(2) 在Suseslony1_funcs.2.0中,因此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)。(都是从32位版本下载的)

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

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

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

任何帮助都将不胜感激


提前感谢

好的-您的安装脚本没有明显错误,我们知道它适用于Windows和LinuxLinux

在windows计算机上,您可以尝试以下操作:

C:> psql -h 192.168.0.9 -U postgres -d repdb_slave
postgres# load 'foo';
postgres# load 'slony1_funcs.2.2.0';
第一个应该给出一个错误,第二个应该有效。如果没有,请再次检查pg_配置设置以及文件位置和权限

另外-检查PostgreSQL server日志。如果没有看到第一个错误记录在那里,请确保使用数据库和用户名记录错误,然后重试。然后你可以再试试slony,看看它在做什么

如果第二个“加载”确实起作用,那么它可能是slony本身的一个bug(与行尾或类似内容有关)。他们有上面提到的邮件列表,我会把这个问题带到那里,给这个问题一个链接


一定有很多人做过跨平台复制,所以我觉得奇怪的是Slony中竟然有这么明显的bug。不过,我看不出我们遗漏了什么。

多亏了理查德·赫克斯顿,我发现了我的问题,据他说,加载了“slony1_funcs.2.2.0”;给我一个windows和linux中的错误,然后我意识到我的Slony版本是不同的,在windows中,版本是2.2.0,在linux中是2.2.2,(在Postgres 9.3的Stackbuilder中获得了不同的Slony版本,适用于windows和linux)

因此,我从linux上卸载了Slony 2.2.2,并为Suse linux手动构建并安装了Slony 2.2.0


现在Windows Linux Slony复制工作正常

看起来这是linux的末日。你已经检查了文件是否存在,所以检查用户postgres是否可以访问它。是的,slony1_funcs.2.2.0。在/opt/PostgreSQL/9.3/lib/PostgreSQL上也有,事实上,我刚刚从Ubuntu计算机到Suse计算机尝试了同样的方法,效果很好,只是windows计算机无法使用SuseOK执行,很好。(1) 显示您的脚本(至少到第8行)和(2)检查一些棘手的问题,如行尾/字符编码问题。@RichardHuxton:请在我的问题中找到编辑,我已经显示了完整的脚本文件。(仅供参考:我正在为ubuntu和其他计算机使用相同的脚本文件,同时在conninfo中更改了ip地址)RichardHuxton,谢谢你们的输入,真的帮助我解决了slony版本错误。