Настройка PostgreSQL в Debian/Ubuntu для сервера 1С 8.1

Последние несколько дней имел дело с настройкой Postgresql в Ubuntu 8.04 для сервера 1C 8.1. Серверная часть 1С расположена на Windows 2008, а постгрес было решено вынести на отдельный линуксовый сервер и связать все это чудо локальной сетью. Собственно, как выяснилось, для корректной работы 1С с нашим сервером, требуется специальная сборка Postgresql, которая содержит необходимые патчи. В общей сложности установка 1C-ного постгреса такая же как и обычного, но я столкнулся с многими косяками и нюансами в процессе данной операции, о которых и намерен рассказать в данной статье. В интернете я нашел 2 варианта установки: 1. взять патчи с официального сайта 1С, взять исходники постгреса, наложить патчи, скомпилить и установкить; 2. взять готовые пакеты сервера, собранные со всеми необходимыми патчами на сайте компании Ethersoft и установить их. В 1-м случае идем за исходниками сюда и за патчами сюда. Качаем, распаковываем, применяем патчи, компилим и устанавливаем. Я терпеть не могу собирать что-либо из исходников, т.к. это отнимает кучу времени и нервов (гентушники меня сейчас тихо ненавидят :))), поэтому я выбираю вариант 2-й (компилить из исходников я все же пробовал, но ничего хорошего из этого не получилось) В случае с готовыми пакетами идем сюда и выбираем пакетики на свой вкус и для своего дистрибутива. Я настраивал Ubuntu 8.04 (x86-64) поэтому взял эти — ftp://updates.etersoft.ru/pub/Etersoft/Postgres@Etersoft/stable/x86_64/Ubuntu/8.04/ Качаем в отдельную папку и устанавливаем командой:

$ dpkg -i *.deb

Если у вас все установилось корректно, то вы счастливый человек :) у меня же данные пакеты посыпались ошибками и установились настолько криво, насколько это возможно, и всему виной предыдущая инсталяция постгреса, которая при удалении не забрала с собой в ад все свои файлы. В итоге, при установке патченной версии, я получил ошибки записи некоторых файлов и создания некоторых sym-линков. Сказать по правде, сначала я не обратил на это внимания, т.к. сервер стартанул и с виду вполне нормально работал (об этом расскажу ниже). Итак, считаем что пакеты поставились корректно. Теперь установим дополнительные библиотеки, для работы PostgreSQL:

$ apt-get install libxslt1.1

и запустим наш сервер БД:

$ /etc/init.d/postgresql start

сервер выдаст сообщение об успешной инициализации БД и успешном запуске, если нет — значит он установлен криво и о том как его выровнять расскажу позже, а сейчас считаем что на данном этапе все работает. Зададим пароль администратору PostgreSQL:

$ sudo su postgres -c psql postgres
postgres=# ALTER USER postgres WITH PASSWORD 'password';
postgres=# \q

Вместо password пишем свой пароль. На этой команде я получил ошибку. Что-то типа:

psql: could not connect to server: No such file or directory

Вызвано это тем, что наш сервер хранит свой сокет в папке /tmp вместо дефолтной /var/run/postgresql. Для решения этой проблемы я сделал символическую ссылку. Можно явно задать сокет с помощью опции -h при коннекте к БД, но я посчитал, что ссылка более универсально решит эту проблему. В общем:

$ ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

После этого проблем с подключением к БД из консоли не должно возникнуть. Далее настраиваем наш сервер для работы в сети и по желанию phpPgAdmin. О том, как это делается, я рассказывал здесь. Считаем что настроили :) Лезем на сервер с виндой и пытаемся подключиться и создать базу. Что бы линуксовый сервер был доступен по имени, пропишем в файл C:\WINDOWS\system32\drivers\etc\hosts строку:

192.168.1.5       PSQLSERVER
где 192.168.1.5 - ip сервера с PostgreSQL.

если вам очень повезло, то настройка PostgreSQL для сервера 1С законченна, но для меня это было лишь половина пути :) Сначала я получил ошибку:

could not access file '$libdir/fastrun' No such file or directory.

при этом сервер постгрес выглядел вполне рабочим и в лог писал что-то вроде:

. . .
NOTICE:  there is no transaction in progress
ERROR:  type mvarchar does not exist
STATEMENT:    CREATE OR REPLACE FUNCTION isfulleq_mvarchar(mvarchar, mvarchar)
  RETURNS bool AS '$libdir/mchar'
  LANGUAGE C CALLED ON NULL INPUT IMMUTABLE;
. . .
NOTICE:  there is no transaction in progress
ERROR:  could not access file "$libdir/fasttrun": No such file or directory
STATEMENT:    CREATE OR REPLACE FUNCTION fasttruncate(text)
  RETURNS void AS '$libdir/fasttrun'
  LANGUAGE C RETURNS NULL ON NULL INPUT IMMUTABLE;
 
NOTICE:  there is no transaction in progress
. . .

Причина данной гадости в том, что не хватает библиотек PostgreSQL. В моем случае из-за того, что постгрес установлен криво т.к. старая версия из репозитариев не удалилась полностью, а новая установилась сверху. В итоге у меня получилась каша из 2-х разных постгресов, одни файлы от старого, другие от нового, пути, библиотеки, символьные ссылки и т.п. все это мешалось и путалось между собой. В общем было решено удалить все файлы постгреса, которые я только нашел поиском и руками. В папках:

/etc/init.d
/var/lib
/usr/lib
/usr/bin
/usr/share

После этого попробовал опять установить пакеты с помощью

$ dpkg -i *.deb

но они все же не устанавливались корректно, поэтому распаковал каждый пакет, скопировал файлы в системные папки и выполнил скрипты. На этом проблема с нехваткой библиотек решилась и возникла проблема с локализацией, т.к. на сервере Ubuntu не была установленна украинская локаль. Устанавливаем:

$ apt-get install language-pack-uk language-pack-ru
$ locale-gen uk_UA.UTF-8
$ locale-gen ru_RU.UTF-8
$ dpkg-reconfigure locales

На этом настала мне радость и всемирное блаженство :) т.к. база создалась безо всяких матюков :) Цель этой статьи не столько описать последовательность действий при настройке PostgreSQL, как описать все мои грабли и косяки, а так же их причину и способ устранения, что бы не сталкиваться с этим в будущем и, возможно, помочь кому-то избежать ошибок :)

Настройка PostgreSQL в Debian/Ubuntu для сервера 1С 8.1: 1 комментарий

  1. Denix

    Увлекательно — но вот у меня лично тоже с косяками от предыдущего Постгриса траблы. Не расскажешь подробней как бороться и чистить систему от них ?

Обсуждение закрыто.