Ошибка Slony, репликация Postgres - Slonik: PGRES_FATAL_ERROR load '$ libdir / slony1_funcs.2.2.0

До сих пор я успешно выполнил репликацию Slony для Postrong на одном компьютере (и главный, и подчиненный находятся на одном компьютере, то есть на локальном хосте).

Я делал это в Ubuntu 12.04, Suse Enterprise server 11 и Windows. Я выполнил примерные шаги из этой ссылки. http://www.linuxjournal.com/article/7834?page=0,0 и "," b2yni25v4f2 "".

Я даже смог выполнить эти шаги между двумя разными главными IP-адресами компьютера с Windows: 192.168.0.3 Slave ip 192.168.0.8)

Но когда я попробовал репликацию Slony между Windows и Suse (Master: Windows (192.168.0.3) и Slave: Suse (192.168.0.9)) при запуске slonik C: \ Slony \ mtscript.txt, я получил эту ошибку

C: \ Slony \ mtscript.txt: 8: PGRES_FATAL_ERROR загрузить '$ libdir / slony1_funcs.2.2.0'; - ОШИБКА: не удалось получить доступ к файлу "$ 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 password = root' < / сильный>

Когда я погуглил об этой ошибке, я не нашел много, я просто узнал, что, разрушив команду ./pg_config, я обнаружил, что,

(1) в Windows slony1_funcs.2.2.0.dll находится в LIBDIR = C: /PROGRA~2/POSTGR~1/9.3/lib (т.е. C: \ Program Файлы (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) (обе загружены для from здесь 32-разрядная версия)

Каталог установки Windows Postgres: C: \ Program Files (x86) \ PostgreSQL \ 9.3

suse Каталог установки Postgres: /opt/PostgreSQL/9.3/bin

Итак, как решить эту ошибку? Как выполнить репликацию Slony между Windows и Linux (suse)?

любая помощь будет оценена по достоинству.

заранее спасибо


person Jony    schedule 16.10.2014    source источник
comment
Похоже, это конец Linux. Вы проверили наличие файла, поэтому убедитесь, что пользователь postgres может получить к нему доступ.   -  person Richard Huxton    schedule 16.10.2014
comment
да slony1_funcs.2.2.0.so находится в /opt/PostgreSQL/9.3/lib/postgresql, на самом деле я только что пробовал то же самое с компьютера Ubuntu на компьютер Suse, и он работал нормально, просто этот компьютер с Windows не может выполнять с Suse   -  person Jony    schedule 16.10.2014
comment
Хорошо. (1) Покажите свой сценарий (по крайней мере, до строки 8) и (2) проверьте наличие чего-то сложного, например, проблем с окончанием строки / кодировкой символов.   -  person Richard Huxton    schedule 16.10.2014
comment
@RichardHuxton: Пожалуйста, найдите РЕДАКТИРОВАТЬ в моем вопросе, я показал свой полный файл сценария. (К вашему сведению: я использую тот же файл сценария для ubuntu и другого компьютера, также с изменением IP-адреса в conninfo)   -  person Jony    schedule 17.10.2014


Ответы (2)


Хорошо, в вашем сценарии установки нет ничего плохого, и мы знаем, что он работает для Windows ‹=> Windows и Linux ‹=> Linux.

Можете ли вы попробовать что-нибудь вроде:

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 еще раз и просто проверить, что он делает то, что мы думаем.

Если вторая «загрузка» действительно работает, то это может быть ошибка в самом slony (что-то связано с окончанием строки или чем-то подобным). У них есть списки рассылки, упомянутые на http://slony.info, и я бы решил эту проблему там, дав ссылку на это вопрос.

Должно быть много людей, которые выполнили кроссплатформенную репликацию, поэтому мне кажется странным, что в Slony была такая очевидная ошибка. Я не вижу, что нам не хватает.

person Richard Huxton    schedule 17.10.2014
comment
Ричард Хакстон, спасибо за ваш вклад, действительно помог мне решить ошибку версии Slony. - person Jony; 18.10.2014

Благодаря Ричарду Хакстону, что я обнаружил свою проблему, по его словам, load 'slony1_funcs.2.2.0'; дайте мне ошибку как в Windows, так и в Linux, а затем я понимаю, что моя версия Slony отличается, в Windows версия была 2.2.0, а в Linux - 2.2.2 (у меня была другая версия Slony в Stackbuilder из Postgres 9.3 для Windows и linux)

Итак, я удалил Slony 2.2.2 из Linux и вручную собрал и установил Slony 2.2.0 для Suse Linux.

И теперь Windows ‹==> Linux Slony Replication работает нормально.

person Jony    schedule 18.10.2014