Как установить патч postgresql для 1с windows

Существует такой интернет-мем «бросить на вентилятор». Желающие могут ознакомится с тем что...

И это всё?

Ну и последнее для данной публикации это патч вводящий новый тип, точнее «контрибьютящий» некоторой количество кода внутрь нашего «адаптированного для 1С PostgreSQL». И тут нам вдруг открывается, что оказывается можно собирать свой PostgreSQL со своим набором библиотек. Интересное знание, и прежде чем вы скажете, что мы должны использовать только нативное и без расширений, я вам скажу что функционал таких модулей http://www.postgresql.org/docs/9.3/static/contrib.html — это официальный нативный функционал. Казалось бы, что такое знание совершенно не полезно.

Напомню, что дополнительных библиотек, которые собираются вместе со стандартными всего 5 в последнем (на текущий момент) патче.

  • mchar
  • fulleq
  • fastrun (опечатка сделана специально ;-) )
  • online_analyzer
  • plantuner

И вы знаете мне эти библиотеки понравились. Причем каждая по своему:

online_analyzer и plantuner – сразу нас приводят на сайт http://sigaev.ru/

для НЕ желающих ходить по ссылкам, сразу скажу – эти 2 модуля добавляют известное поведение MSSQL – USEPLAN и аналог AUTOUPDATESTATS. И мне понравилось – во-первых данные библиотеки сразу же были включены в Ruby on Rails проект (точнее в их PostgreSQL), где в тот момент в силу большого количества пользователей наблюдались проблемы с производительностью с PostgreSQL. Особенную проблему вызывала как все 1С-ники знают, проблемы со статистикой записей. А тут оказалось, что можно построить адаптивный план обслуживания. Просто в PostgreSQL функция UPDATE STATS из MSQL называется ANALYZE TABLE.

Необходимость использования «хинтов» для плана запроса, говорит нам о том, что в 1С знают, что их запросы, формируемые в виде SQL достаточно нетривиальны, а также о том что оптимизатор планов запросов PostgreSQL проигрывает тому же MSSQL, где прецедентов необходимости подобного было очень мало и чаще всего причиной являлся плохой код. Вместе с этим именно это знание послужило основанием для решения НЕ использовать 1C+PostgreSQL для 1С:Зарплата и управление персоналом, в связи с особенностями текстов запросов. Но тесты на 1С ЗУП 3.0 уже показывают обратное поведение в связи с переработкой модели и методологии, которые на несколько порядков упрощают запросы. Вообще поведение последних редакций больших типовых (УТ 11.1, БП 3.0, ЗУП 3.0) позволяет с уверенностью сказать о их адаптированном поведении к PostgreSQL и Oracle. Спросите – откуда здесь появился Oracle? Мало кто знает, но PostgreSQL очень похож на Oracle. Не функционалом конечно, в Oralce он на порядок мощнее, а заложенной методологией. Существует версия что PostgreSQL рождался как OpenSource ответ большому и дорогому Oracle. Ключевым, наверное, термином здесь является PLpgSQL и остальные. Изучив PostgreSQL и его поведение, в случае если ваша компания захочет адаптировать 1С к Oracle, ваш опыт будет повторно использован, в силу особенностей архитектуры обоих. Ну и необходимо понимать, что PostgreSQL имеет версию и платную функциональность http://www.enterprisedb.com/products-services-training/subscriptions и цены там вполне себе Enterprise. Особенно для функциональности наподобие AlwayOn от MSSQL.

На самом деле, если продолжать можно понять, что 3 остальных библиотеки mchar, fulleq и fastrun – то же добавляют интересную функциональность, и даже НЕ для решений на 1С платформе. Особенно интересен новый тип MCHAR, а также то зачем для него понадобилась библиотека ICU. Что дает нам понимания, что работа в том числе с UTF-8 при использовании чистого PostgreSQL будет и есть достаточно Не тривиальной задачей, с чем вы обязательно столкнетесь, когда начнете писать приложение, которому будет необходимо хранить строки в национальных кодировках – когда например ваше приложение будет иметь пользователей из России и Канады например, да еще с Китая в добавок. Прежде чем мы начнем спорить необходимо понимать какую функциональность содержит mchar.h и файлы mcharmchar*.c. Но для этого вам понадобится знания языка С для чтения кода.

В сухом остатке. Теперь я могу точно ответить – «Мне очень нравится данный патч». Надеюсь вы понимание почему?

«Да, забудьте Вы об SQL Express» говорю я многим своим клиентам последние так года два.

Отчасти сам виноват, в 2015-ом опубликовал видео «1С 8.3 и SQL Server 2014 Express».

И это видео для многих почему-то сработало как сигнал на внедрение версии Express.

Несмотря на то, что в этом уроке я говорю о серьёзных ограничениях этой версии СУБД, да, собственно как и Microsoft, прямо пишет, — «Эту бесплатную версию стоит использовать только для теста и ознакомления».

(Цель видео в том, чтоб показать ограничения файлового варианта работы в 1С, как перейти на клиент-сервер и показать ограничения версии Express).

И лишь в некоторых случаях, когда база 1С совсем малая и с базой работает пара пользователей, нет нагрузок, тогда, может быть смысл использовать эту СУБД для реальной работы в 1С.

Отличия PostgreSQL от MS SQL читайте здесь >>

Но большинству конечно ограничения не позволят работать «нормально» в клиент-сервере.

Как минимум нужна версия Standard.

Альтернативой MS SQL всегда был и остается PostgreSQL.

Конечно, данная тема также подымается и на курсе: Администратор 1С!

Абсолютно бесплатная*  СУБД с реализацией как под Linux, так и на Windows.

Бытует мнение, что PostgreSQL нормально работает только на Linux.

Но это ужа давно не так (Хоть изначально он и разрабатывался под UNIX-подобные платформы).

Сегодня PostgreSQL можно смело использовать и на Windows , (Пользователей 50-70- одновременно работающих в 1С будет держать нормально, до 15-ти, даже не нужно никаких доп. настроек!).

Если у Вас пользователей будет больше, тогда лучше брать MS SQL.

Конечно, в сети можно встретить примеры, (особенно в последнее время) когда  PostgreSQL  работает на сотнях пользователей в 1С, но я такого в живую не видел (чтоб без косяков, при большом количестве запросов) чтоб СУБД работала также быстро и хорошо, как и на MS SQL standard, например.

Вот одна из причин: PostgreSQL не умеет работать многопоточно!

Иногда в интернете, можно наткнуться на статью что PostgreSQL грузит только одно ядро на 100%, и мол не работает с многоядерными архитектурами.

Знайте, что это не так! (Вернее не совсем так!)

PostgreSQL грузит все ядра, только если есть соответствующее количество запросов .

Один большой запрос действительно может  на 100% загрузить одно ядро вашего сервера так как

1 запрос = 1 поток! (На этой СУБД).

 Но если запросов будет много, соответственно и все ядра будут задействованы также.

PostgreSQL способен задействовать все ядра вашего сервера!

Каждое ядро может дать нам несколько потоков, например как минимум два, и уже, чтоб задействовать 2 ядра (4 потока) будет достаточно отправить на СУБД 3 — 4 запроса.

Помните?

1 запрос = 1 поток.

Другими словами, не распараллеливается выполнение одного запроса.

Нет многопоточности! в рамках одного запроса  — это одна из причин, почему PostgreSQL работает медленнее MS SQL.

Один большой запрос может стать «узким местом» в производительности вашей 1С на этой СУБД.

Есть, конечно, еще много вопросов по «бєкапу», настройке и оптимизации PostgreSQL в том числе и под крупные внедрения, но это все подробно мы будем обсуждать уже на курсе: Установка и настройка 1С 2017.

Как известно без специальных «патчей» от компании 1С СУБД-шка работает не стабильно, вылетает + есть  проблемы с производительностью.

Но с «пропатченой» таких серьезных проблем обычно не возникает.

Дело в том что в 1С часто используются временные таблицы, а PostgreSQL плохо сними дружит.

«Патчи» как раз правят эти и другие «косяки 1С» в официальном релизе.

Теперь о главном!

В феврале 2015 года наиболее известные российские разработчики PostgreSQL основали компанию «Постгрес Профессиональный» (Postgres Professional), целью которой стало развитие СУБД PostgreSQL и оказание полного спектра связанных с ней услуг.

И если раньше я скачивал PostgreSQL на сайте 1С (Поддержка пользователей), то сегодня

Я беру дистрибутив на сайте postgrespro.ru (Как для Windows так и для Linux).

Внимание Важно!

PostgresPro Standard и Enterprise — платные!

https://postgrespro.ru/products/postgrespro#license

Качайте просто «пропатченую 1С» по ссылке ниже:

https://postgrespro.ru/products/1c

Enterprise — действительно очень дорогой продукт, а вот Standard на момент написания статьи, приобретается как годовая поддержка.

Другими словами Вы покупаете поддержку на год и получаете версию Standard в *подарок*.

Второй способ получить PostgreSQL бесплатно:

Для этого нужно скачать на сайте поддержки пользователей 1С, нужный Вам дистрибутив PostgreSQL со всеми патчами для 1С, и работать бесплатно на этой СУБД.

На момент написания статьи, доступна версия PostgreSQL 9.6.5 для 1С Предприятия.

Все в *свободном доступе*, можно скачать и установить у себя.

Делюсь ссылкой, друзья >>>

1

Дело в том, что Postgres Pro (основанный на PostgreSQL) уже содержит все нужные «патчи» для 1С Предприятия.

И Вы не «паритесь» поиском каких-то  критически важных «патчей» все уже включено в эту сборку, это удобно.

Даже для Windows включены дополнительные «патчи» повышающие отказоустойчивость еще не успевшие войти в стабильный релиз, например, включены «патчи», которые исправляют проблему с правами доступа и критический баг с остановкой Postgres.

Установка:

Качаем инсталлятор на сайте по ссылке выше.

И приступаем к установке.

1

Конечно я рекомендую ставить СУБД на Windows Server 2016.

Установка PostgreSQL на Windows совсем не сложная, но во избежание каких-то возможных проблем, смотрите ниже в скриншотах весь процесс пошагово: 

2

Как видно уже на скрине, сборка действительно под 1С-ку. «PostgresPro 1C 9.6».

4

Принимаем условия лицензионного соглашения «Принимаю».

И установим все нужные компоненты.

Клик по кнопке «Далее».

5

Укажем каталог где будет установлен сам PostgresPro (Можно оставить каталог по умолчанию).

6

Клик по кнопке «Далее».

Теперь нужно указать каталог для наших баз данных.

8

11

На вкладке параметров порт 5432 можно оставить по умолчанию (Если у Вас он свободный на момент установки).

Затем птичку «Подключение с любых IP адресов» убираем если Сервер 1С и СУБД будут располагаться на одном сервере.

Иначе оставляем все как есть.

Локаль: — Russian, Russia.

Супер пользователя можно оставить по умолчанию «postgres».

И обязательно создадим пароль для него.

9

Птичку возле «Провести оптимизацию параметров» оставляем по умолчанию.

12

И клик по кнопке «Установить».

Все готово! можно создавать базу используя утилиту администрирования серверов 1C.

Для удобства администрирования, рекомендую еще установить дополнительно и PGAdmin 4.

Если Вы хотите больше узнать о технической стороне 1С, тогда регистрируйтесь на первый бесплатный модуль курса: Администратор 1С >>>

Содержание

  • 1 Сборка PostgreSQL для 1C на Gentoo
  • 2 Где мы находимся
    • 2.1 Что мы имеем
  • 3 Качаем патчи
  • 4 Локальный оверлей
  • 5 Приготовление исходников
    • 5.1 А как же в Gentoo?
    • 5.2 Наложение патчей от 1c/etersoft
  • 6 Получение итогового патча
  • 7 Шлифуем ebuild-файл
  • 8 Создание цифровой подписи для ebuild-файла
  • 9 Подготовка системы к установке
  • 10 Установка PostgreSQL с патчами от 1C — gentoo-way
  • 11 Послеустановочный тюнинг
    • 11.1 Файл /etc/conf.d/postgresql-8.4
  • 12 На старт…
    • 12.1 Отладка и запуск
    • 12.2 Авторизация на сервере
  • 13 Размышления
  • 14 Ресурсы
  • 15 Другие рецепты инсталляций
  • 16 Файлы

Сборка PostgreSQL для 1C на Gentoo

Возникла необходимость поднять на Gentoo PostgreSQL-сервер для 1С-ки. Как всем известно одинэсовцы являются знаменитыми костылестроителями и в данном случае СУБД PostgreSQL не обошли стороной.

Почему Gentoo? Потому что данный дистр можно заточить именно для решения узко определенной задачи, со всеми преимуществами оптимизации USE-флагов, в отличие от бинарных дистров, где много вшито лишнего, а сборка собственных пакетов означает отказ от пакетных менеджеров (может и не так, не знаток этого вопроса), что сильно ухудшает поддержание инсталляции в актуальном состоянии. Ну и к тому же, на то он и гентушник раз любит сам готовить, а не использовать готовое.

Блуждания в интернете не принесли желаемого результата, а именно не нашлось ebuild-а, для такой задачи, хотя упоминания имеются, на неком ростовском сервере, то некто выкладывал на форуме (может плохо искал), то изобретали костыли с использованием rpm2cpio — над пропатченными сырцами, а то и вовсе редхатовскими бинарниками, но сим не есть gentoo-way, а хочется именно чтобы собрать из сырцов, без левых зависимостей, установить в каталоги стандартные для этой системы, а не какие-то /opt, и чтобы пакетный менеджер знал о нашей инсталляции и считал ее родной, с учетом make.conf и USE-флагов.

Имеется хороший ресурс ftp://ftp.etersoft.ru/pub/, оттуда берем патчи 1С-ки для PostgreSQL 8.4.4 — ftp://ftp.etersoft.ru/pub/Etersoft/Postgre@Etersoft/8.4.4/sources/postgresql-8.4eter-8.4.4-alt1.1.src.rpm, т.к. у самих 1С-цев на сайте патчи только для версии 8.4.1 (опять-таки может плохо искал, а может они и подходят для нашей версии). Кроме того, етерсофтцы опять таки патчат некоторые наработки одинэсевцев, исправляя их баги.

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

Итак, наш рецепт приготовления будет состоять в следующем:

  • скачиваем сырцы и патчи на etersoft.ru
  • готовим локальный оверлей
  • наложение гентушных патчей на оригинальные исходники
  • наложение етерсофтных патчей поверх гентушных
  • снятие diff-а с гентушных сырцов PostgreSQL и патченного етерсофтом, в целях получения своего патча
  • оформляем патч для кормления epatch’а
  • оформляем наш ebuild
  • ловля блох (багов) сборки
  • тюнинг системы
  • напутствия жаждущим

Где мы находимся

В качестве версии СУБД будем использовать версию 8.4.4, хотя сейчас уже 1с-цы выложили патчи для 9-й версии, думаю не будет сложно и их адаптировать по аналогии.

Ранее установленная ОС Gentoo x86_64 на домашней машине [4G 1333, 1Tb] (самопальное ядро Linux localhost 2.6.36-gentoo-r5 #1 SMP Sun Dec 26 21:57:53 YEKT 2010 x86_64 Intel(R) Core(TM) i3 CPU 530 @ 2.93GHz GenuineIntel GNU/Linux и все что на нем крутится также собрано gentoo-способом), которая содержит очень много лишнего для боевого сервера узко-направленного значения, но это нам не помешает, а скорее будет проще не отвлекаться на шлифовку ядра, если таковое требуется, о чем мне не ведомо.

Что мы имеем

Для начала обновим порты, это уж кто как предпочитает, я делаю так:

# eix-sync

Посмотрим что нам предлагают в портежах:

eix postgresql-server
[D] dev-db/postgresql-server
    Available versions:  
       (8.1)	8.1.21-r1 ~8.1.22
       (8.2)	8.2.17-r1 ~8.2.18
       (8.3)	8.3.11-r1 ~8.3.12
       (8.4)	8.4.4-r1!t ~8.4.5!t
       (9.0)	~9.0.0!t ~9.0.1!t

Как видно последняя размаскированная (а значит стабильная версия postgresql-а) — 8.4.4-r1, то что нам нужно.

Качаем патчи

Как было сказано качаем исходники PostgreSQL вместе с патчами отсюда ftp://ftp.etersoft.ru/pub/Etersoft/Postgre@Etersoft/8.4.4/sources/postgresql-8.4eter-8.4.4-alt1.1.src.rpm. Открываем архив кому как угодно, я пользуюсь Gnome — у него имеется менеджер архивов и вытаскиваем оттуда следующие файлы:

  • 1c_FULL_84-0.19.2.patch — оригинальный 1с-ский патч, добавляет три новых модуля fulleq, fasttrun, mchar и еще массу телодвижений
  • 1cfix_etersoft.patch — данный патч фиксит 1с-ский патч
  • applock-1c-8.4.1.patch — добавляет необходимоые типы блокировок
  • eter-rename-libpq.patch — переименовывает библиотеку (единственное, что мне пришло в голову зачем это сделано, так это чтобы как то отметиться в системе, — вместо стандартного названия libpq, делает название libpq-8.4eter, мне это показалось саморекламой (есть ли нарушения GPL? или BSD, или какая лицензия у PostgreSQL и патчей?), поэтому данный патч не был использован, к тому же при сборке PostgreSQL все же хочет файл libpq, так что ребята недостарались)
  • postgres_datalen.patch — что-то меняет для успешной инициализации кластера PostgreSQL (initdb)
  • postgresql-1c-8.4.patch — рихтует Makefile для сборки модулей написанных 1с-цами — fulleq, fasttrun, mchar, плюс рихтует конфиг для PostgreSQL
  • postgresql.conf.sample.patch — как видно из названия, также рихтует конфиг (честно говоря не понимаю для чего это сделано, ребята полагают, что PostgreSQL будут ставить полные нули которые не осилят чтения документации а-ля MSSQL)
  • postgresql-no_transaction_blocks.patch — этот и следующие два патча, по мелочам вносят правки
  • postgresql-perl-rpath.patch
  • postgresql-tmp_table_cleanup.patch
  • rpm-pgsql.patch — опять самопиар для сборки RPM-пакета, также не понял зачем менять стандартную директорию размещения БД-х PostgreSQL с /var/lib/postgresql, на /var/lib/pgsql
  • timestamp.c.diff — корректировки насчет пустого поля времени — по аналогии с MSSQL, устанавливает в качестве даты значение 1900-01-01 по умолчанию для полей даты таблицы — могу ошибаться, но где-то встречал такое описание (как ни странно, но это отражено в самом патче).

Сохраним патчи сюда

mkdir -p /tmp/postgresql/patches

Локальный оверлей

Для интеграции в существующее дерево портежей плодов наших манипуляций сделаем локальный оверлей (почитать можно здесь http://ru.gentoo-wiki.com/wiki/Portage_Overlay):

echo 'PORTDIR_OVERLAY="/usr/local/portage"' >> /etc/make.conf
install -d /usr/local/portage

У кого будут ругания на оверлей, почитать man make.conf и гугл — у меня не было косяков, но может быть конфликт с другими параметрами в нем, на предмет очередности их объявления.

По аналогии с родной структурой дерева портежей создаем структуру директорий для локального:

mkdir -p /usr/local/portage/dev-db/postgresql-server

Копируем исходный ebuild, который будем патчить:

cp /usr/portage/dev-db/postgresql-server/postgresql-server-8.4.4-r1.ebuild 
/usr/local/portage/dev-db/postgresql-server/postgresql-server-8.4.4-r3.ebuild

Стоит обратить внимание что исходный ebuild имеет версию обновления r1, нам нужно чтобы не совпадало с ней, поэтому свой ebuild называем r3 (r2 появился у меня после очередного eix-sync), — надо выбирать именование так чтобы не пересекалось с имеющимися ebuild’ами, возможно можно как-то еще, но по правилам именования нужно соблюдать определенные требования.

Также при сборке PostgreSQL понадобятся патчи подготовленные командой Gentoo, вероятно как-то можно использовать их из системного дерева портежей, но пока не знаю как, так что делаем:

cp -R /usr/portage/dev-db/postgresql-server/files 
/usr/local/portage/dev-db/postgresql-server

Хотя реально оттуда требуется всего лишь два файла:

* /usr/portage/dev-db/postgresql-server/files/postgresql-8.4-common.patch
* /usr/portage/dev-db/postgresql-server/files/postgresql-8.4-server.patch

Приготовление исходников

Использовать исходники PostgreSQL не будем от команды etersoft’а (как-то в душу запали только их патчи, не дай .. они еще и сырцы трогали, про сравнение хэш-сумм знаю — не заморачивался), а возьмем те что тянет emerge из интернета для оригинального PostgreSQL.

Загружаем исходники:

emerge -fv dev-db/postgresql-server

Сделаем рабочую директорию и распакуем туда сырцы:

mkdir -p /tmp/postgresql/orig && cd /tmp/postgresql/orig && 
tar xjf /usr/portage/distfiles/postgresql-8.4.4-tar.bz2 

Идем туда и накладываем гентушные патчи:

cd /tmp/postgresql/orig/postgresql-8.4.4
patch -p0 -g0 -E < /usr/local/portage/dev-db/postgresql-server/files/postgresql-8.4-common.patch
patch -p1 -g0 -E < /usr/local/portage/dev-db/postgresql-server/files/postgresql-8.4-server.patch

С ключами у них для одного патча применяем -p0 для другого -p1, по-крайней мере у меня так получилось. Хотя можно применять просто команду: patch -pX < <patch-name>, но анализ лог-файлов показал, что epatch использует такую хитрую комбинацию ключей. Теперь считаем что у нас получились эталонные исходники, на которые будет ebuild накладывать патчи для 1с-ки.

Подготовим площадку для дальнейших экзекуций:

mkdir -p /tmp/postgresql/patch
cp -R /tmp/postgresql/orig/postgresql-8.4.4 /tmp/postgresql/patch

Теперь нужно внимательно изучить файл postgresql-8.4eter.spec, поставляемый в postgresql-8.4eter-8.4.4-alt1.1.src.rpm, чтобы определить в каком порядке накладываются патчи, вообщем имеется такая секция описывающая порядок и уровень -pX, с которым они применяются:

# Patch1: rpm-pgsql.patch
%patch1 -p2
# Patch4: postgresql-test.patch
# now test is by C program.
# %patch4 -p1
# Patch6: postgresql-perl-rpath.patch
%patch6 -p2
# Patch7: 1c_FULL_83-0.19.patch
%patch7 -p2
# Patch8: postgresql-1c-8.4.patch
%patch8 -p2
# Patch9: applock-1c-8.3.1.patch
%patch9 -p0
# Patch10: timestamp.c.diff
%patch10 -p2
# Patch11: postgresql.conf.sample.patch
%patch11 -p2
# Patch12: pg_hba.conf.sample.patch
# already included in postgresql-1c-8.3.patch
# %patch12 -p1
# Patch13: postgres_datalen.patch
%patch13 -p2
# Etersoft's fix for 1c patches
# Patch15: 1cfix_etersoft.patch
%patch15 -p2
# Etersoft rename libpq
%patch50 -p2
#Patch51: postgresql-tmp_table_cleanup.patch
%patch51 -p1
#Patch52: postgres-no_transaction_blocks.patch
%patch52 -p2

А как же в Gentoo?

Последив как работает команда ebuild при сборке пакетов (немного есть здесь http://www.gentoo.org/doc/ru/handbook/handbook-x86.xml?part=3&chap=6), выяснил что выполняются по шагам следующие действия:

  • ebuild /path/to/ebuild unpack
  • ebuild /path/to/ebuild prepare
  • ebuild /path/to/ebuild compile
  • ebuild /path/to/ebuild install
  • ebuild /path/to/ebuild clean

Распаковка исходников производится в каталог: /var/tmp/portage/dev-db/postgresql-server/work/postgresql-8.4.4 и он делается текущим, затем при выполнении команды prepare, накладываются патчи и выполняется ./configure, т.е. команда patch вызывается с уровнем -p0 (хотя и это меняется редактированием ebuild-файла), вот это и нужно поправить в патчах. Вообщем как удалось расковырять патчи ложатся в следующем порядке, хотя для некоторых файлов он не важен (не спешим патчевать, а читаем дальше):

cd /tmp/patch/postgresql
# сделаем симлинк
ln -s postgresql-8.4.4 postgresql
patch -p2 < postgreslq-perl-rpath.patch
patch -p2 < 1c_FULL_83-0.19.patch
patch -p0 < applock-1c-8.3.1.patch
patch -p2 < timestamp.c.diff
patch -p2 < postgresql.conf.sample.patch
patch -p2 < postgres_datalen.patch
patch -p2 < 1cfix_etersoft.patch
patch -p1 < postgresql-tmp_table_cleanup.patch
patch -p2 < postgres-no_transaction_blocks.patch

Как видно, были пропущены файлы prm-pgsql.patch и eter-rename-libpq.patch по причине описанной ранее. Также patch споткнется на файле postgresql-1c-8.4.patch, — он выполняет редактирование файла postgresql/contrib/Makefile, на предмет добавления в собираемые модули fulleq, mchar и fasttrun — т.к. гентушные патчи тоже наводят там небольшой порядок, то возникает конфликт. Поэтому данный патч можно не применять, а дописать модули вручную (тру-гении смогут и патч отрихтовать). Также этот патч по мелочи шлифует pg_hba.conf.sample и postgresql.conf.sample, т.е. конфигурационные файлы, на попсовые настройки — никто же не собирается использовать дефолтные поэтому можно смело забить. И чтобы было все как с остальными, то содержимое файла postgresql-1c-8.4.patch можно заменить на:

--- ../contrib/Makefile	2011-01-06 15:30:50.670856014 +0500
+++ ../contrib/Makefile	2011-01-06 16:00:39.664856014 +0500
@@ -36,7 +36,10 @@
 		spi		
 		tablefunc	
 		tsearch2	
-		test_parser
+		test_parser	
+		fasttrun	
+		fulleq		
+		mchar

ifeq ($(with_openssl),yes)
WANTED_DIRS += sslinfo

Также файл applock-1c-8.4.1.patch в голом виде так и не смогла переварить команда patch. Исследование содержимого файла показало, что пути к файлам, предназначенные для изменений начинаются следующим образом, например первая строка того же файла содержит:

diff -c -r -N ..postgresql-8.4.0/doc/src/sgml/ref/lock.sgml ./doc/src/sgml/ref/lock.sgml 

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

cd /tmp/postgresql/patches
cat applock-1c-8.4.1.patch | sed 's!../postgresql-8.4.0!../postgresql-8.4.0!' > 
applock-1c-8.4.1.patch-fix && mv applock-1c-8.4.1.patch-fix applock-1c-8.4.1.patch

И делаем симлинки:

cd /tmp/postgresql/patch
ln -s postgresql-8.4.4 postgresql-8.4.0

После манипуляций с патчами можно еще раз прогнать «патчевание» (а лучше все сначала, предварительно сделав rm -rf /tmp/postgresql/patch/postgresql-8.4.4 && cp -R /tmp/postgresql/orig/postgresql-8.4.4 /tmp/postgresql/patch/), т.к у меня все патчи наложились далеко не с первого раза, то процедуру патчевания лучше записать в bash-скриптик.

В итоге в директории /tmp/postgresql/ имеем следующую структуру:

/tmp/postgresql/
|
+- orig (оригинальный PostgreSQL + Gentoo-патчи)
|  |
|  +- postgresql-8.4.4
|
+- patch (копия orig/postgresql-8.4.4 + патчи 1С/etersoft)
|  |
|  +- postgresql
|  +- postgresql-8.4.0
|  +- postgresql-8.4.4
|
+- patches
   |
   +- список файлов-патчей

Наложение патчей от 1c/etersoft

Собственно процедура наложения выглядит таким образом (после всех манипуляций, исправлений и рихтований):

cd /tmp/postgresql/patch/postgres
patch -p2 ../../patches/postgreslq-perl-rpath.patch
patch -p2 ../../patches/1c_FULL_83-0.19.patch
patch -p2 ../../applock-1c-8.3.1.patch
patch -p2 ../../timestamp.c.diff
patch -p0 ../../postgresql-1c-8.4.patch
# Данный патч немного глюкавит, но как очевидно, 
# он делает то что будет переделано - тюнинг конфиг-файла
# patch -p2 ../../postgresql.conf.sample.patch
patch -p2 ../../postgres_datalen.patch
patch -p2 ../../1cfix_etersoft.patch
patch -p1 ../../postgresql-tmp_table_cleanup.patch
patch -p2 ../../postgres-no_transaction_blocks.patch

Получение итогового патча

Возня с исходниками практически закончена, осталось только сделать свой патч и прописать все это дело в ebuild-файле:

cd /tmp/postgresql/patch/
ln -s /tmp/postgresql/orig/postgresql-8.4.4 postgresql-8.4.4.orig
# Это наш патч, который можно отослать другу-гентушнику
diff -urdN ../postgresql-8.4.4.orig ../postgresql-8.4.4 > ../postgresql-8.4-1c8all.patch
# Копируем в папку к остальным патчам
cp /tmp/portage/patch/postgresql-8.4-1c8all.patch /usr/local/dev-db/postgresql-server/files

Свой патч мы делаем, чтобы получить разницу между исходным деревом PostgreSQL и патченным, чтобы эта разница уместилась в одном файле — так менее геморно будет с ebuild-ом возиться.

Шлифуем ebuild-файл

Открываем в любимом редакторе ранее сделанную копию ebuild-файла:

mcedit /usr/local/portage/dev-db/postgresql-server/postgresql-server-8.4.4-r3.ebuild

и вносим правки.

В строке 3 можно поменять (не уверен, что не нужно, хотя и работает без правки):

# $Header: /var/cvsroot/gentoo-x86/dev-db/postgresql-server/postgresql-server-8.4.4-r3.ebuild,v 1.6 2010/08/11 19:27:10 josejx Exp $

— ревизию ebuld-файла

Далее в строке можно поменять

DESCRIPTION="PostgreSQL server with patchset from 1C company. I'm was hack the Internet"

Менять обязательно:

IUSE="1c8 pg_legacytimestamp doc perl python selinux tcl uuid xml nls kernel_linux ${IUSE_LINGUAS}"

— добавили ключик «1c8»

Ищем функцию src_prepare() и после слов epatch …-common.patch …-server.patch пишем свое:

if use 1c8; then
        epatch "${FILESDIR}/postgresql-${SLOT}-1c8all.patch"
fi

Создание цифровой подписи для ebuild-файла

cd /usr/local/portage/dev-db/postgresql-server
ebuild postgresql-server-8.4.4-r3.ebuild digest
# Если все в порядке, то получим, если нет - то читаем вывод и в маны и гугл
>>> Creating Manifest for /usr/local/portage/dev-db/postgresql-server

Подготовка системы к установке

Предварительно сделаем небольшой тюнинг системы:

# Архитектура нашего ПК (в данный момент уже является стабильным для x86 и amd64) поэтому можно и не делать
echo '=dev-db/postgresql-server-8.4.4-r3 amd64' >> /etc/portage/package.keywords
# Маскируем версии старше нашей, чтобы по-умолчанию ставилась наша 
echo '>dev-db/postgresql-server-8.4.4-r3' >> /etc/portage/package.mask
# Указываем USE-флаг ради которого все затевалось
echo '=dev-db/postgresql-server-8.4.4-r3 1c8' >> /etc/portage/package.use

Установка PostgreSQL с патчами от 1C — gentoo-way

Посмотрим, что нам скажет emerge:

emerge -pv postgresql-server
[ebuild   R   ] dev-db/postgresql-server-8.4.4-r3  USE="1c8 nls perl python -doc -pg_legacytimestamp 
(-selinux) -tcl -uuid -xml" LINGUAS="ru -af -cs -de -es -fa -fr -hr -hu -it -ko -nb -pl -pt_BR -ro -sk -sl  
-sv -tr -zh_CN -zh_TW" 0 kB [?=>1]

Total: 1 package (1 reinstall), Size of downloads: 0 kB
Portage tree and overlays:
[0] /usr/portage
[1] /usr/local/portage
[?] indicates that the source repository could not be determined

Как видим система по-умолчанию выбирает нашу сборку (когда 9 версия будет размаскированной, что-то придется поменять в /etc/portage). Emerge увидел два дерева портежей — системный и наш локальный, среди флагов USE появился флаг 1c8.

Для 1с-сборки PostgreSQL, помимо самого флага 1с8, флаги tcl, perl, python, selinux не являются обязательными, т.к. вроде бы являются биндингами к соответсвующим ЯП, насчет остальных не уверен.

А теперь ставим:

emerge -av postgresql-server

Если внимательно посмотреть, то заметим, что после распаковки исходников, происходит наложение патчей по порядку:

postgresql-8.4-common.patch
postgresql-8.4-server.patch
postgresql-8.4-1c8all.patch

А после того как СУБД будет установлена в директорию (можно увидеть при работе процедуры копирования файлов при установке) /usr/lib64/postgresql-8.4/lib64 помимо идущих в комплекте файлов модулей, будут лежать 1с-ские модули: fasttrun.so, fulleq.so и mchar.so.

Почистим /tmp, больше не пригодится

rm -rf /tmp/postgresql

и небольшой лоск (т.к. делал от рута)

chown portage:portage -R /usr/local/dev-db

Послеустановочный тюнинг

В интернете много сообщений на тему руганья 1с-ки: ERROR: Invalid value for parameter «lc_messages»:»en_US». Для Gentoo смотрим:

cat /etc/locale.gen | grep -v "#"
en_US.UTF-8 UTF-8
ru_RU.UTF-8 UTF-8

По рекомендации из того же файла проверяем файл /usr/share/i18n/SUPPORTED | grep «en_US»

en_US.UTF-8 UTF-8
en_US ISO-8859-1

и добавляем локаль:

echo 'en_US.ISO-8859-1' >> /etc/locale.gen

и обновляем систему:

locale-gen 
env-update && source /etc/profile

Скорее всего это не совсем поможет, — читаем дальше.

Файл /etc/conf.d/postgresql-8.4

Смотрим файл на предмет переменных, кластер баз данных по-умолчанию находится по адресу PGDATA, можно поменять как угодно, у меня было так:

PGDATA=/var/lib/postgresql/8.4

поменял на

PGDATA=/var/lib/postgresql

Установим:

PG_INITDB_OPTS="--local=ru_RU.UTF-8"
# Это чтобы PostgreSQL начал слушать на всех адресах, можно указать конкретный
PGOPTS="-h 0.0.0.0"
PG_EXTRA_ENV="LC_ALL="ru_RU.UTF-8""

Но и в таком случае тема «lc_messages» может себя не исчерпать, то делаем вмешательство в скрипт запуска/останова — где-нибудь в начале файла, перед описанием функций, добавляем:

export LC_ALL=ru_RU.UTF-8

На старт…

Если внимательно смотреть лог установка СУБД, то там при окончании процедуры установки говорится, что прежде чем запускать кластер нужно его инициализировать:

emerge --config =dev-db/postgresql-8.4.4-r3

А затем запускаем:

/etc/init.d/postgresql-8.4 start

Для разрешения авторизации на сервере с других компьютеров сети, покорректируем файл /var/lib/postgresql/data/pg_hba.conf, добавив строку

host all all <сетка>/<маска> trust
host all all <сетка>/<маска> md5
# хотя можно просто 0.0.0.0/0

не забыв после этого выполнить перезапуск: /etc/init.d/postgresql-8.4 restart

Отладка и запуск

Ну и напоследок классика жанра — проверить, что PostgreSQL действительно запускается и работает:

netstat -na | grep 5432
ps ax | grep postgres
tail /var/log/messages
tail /var/lib/postgresql/data/postmaster.log

Авторизация на сервере

От рута

su postgres
psql template1
psql# ALTER USER postgres WITH PASSWORD 'newpassword';

Теперь можно из 1с-ки цепляться к серверу указав имя пользователя postgres и пароль newpassword, а также почитать на тему разграничения прав доступа.

Размышления

  • Насчет прав доступа к файлам прошу не обращать внимания, полагаю что Linux-пользователи понимают разницу в уровне доступа для /tmp и /usr, так что где нужно, естественно производится переключение на root (su, sudo, etc).
  • Сами 1с-цы обязуют к использования библиотеку ICU (http://icu.sourceforge.net), хотя она у меня была установлена ранее (eix dev-libs/icu), но беглый просмотр исходников показал, что данная библиотека используется для Windows-сборки PostgreSQL, но вроде бы в модуле mchar (sources/contrib/mchar) в описании Makefile также встречается ее упоминание. Раскопал:
ldd /usr/lib64/postgresql-8.4/lib64/mchar.so 
       linux-vdso.so.1 =>  (0x00007fff105ff000)
       libicuuc.so.44 => /usr/lib/libicuuc.so.44 (0x00007f452ea67000)
       libicui18n.so.44 => /usr/lib/libicui18n.so.44 (0x00007f452e693000)
       libc.so.6 => /lib/libc.so.6 (0x00007f452e337000)
       libicudata.so.44 => /usr/lib/libicudata.so.44 (0x00007f452d2f7000)
       libpthread.so.0 => /lib/libpthread.so.0 (0x00007f452d0da000)
       libdl.so.2 => /lib/libdl.so.2 (0x00007f452ced6000)
       libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/libstdc++.so.6 (0x00007f452cbcb000)
       libm.so.6 => /lib/libm.so.6 (0x00007f452c947000)
       libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f452c730000)
       /lib64/ld-linux-x86-64.so.2 (0x00007f452efed000

Так что будут у кого руганья при сборке, то сначала поступить так: emerge -av dev-libs/libicu, хотя может по зависимостям и вытащит (но в ebuilde ничего такого не нашел и, скорее всего надо будет руками добавлять).

  • В статье автор описывает ручную установку функции datediff в кластере, а также еще чего из SQL-диалекта, однако при загрузке ранее сделанного дампа БД из ранее установленной PostgreSQL (установка на Debian из готовых deb-пакетов), функции уже имелись в наличии, правда они были только для конкретной базы, а не всего кластера (опять же могу ошибаться, хотя в Makefile модулей contrib есть упоминания про sql-файлы, которые возможно заливаются в кластер при его инсталляции, даже если и так, то думаю не составить труда выдернуть SQL-дампы этих функций и записать их в шаблон).
postgres@localhost echo "df" | psql testbase1
выдает кучу функций среди них и datediff и еще пара десятков, судя по названию которых и есть необходимый набор.
  • Данная статья не означает что рассмотренный способ еть Gentoo-way, однако приближение все-таки ощущается.
  • Для других версий СУБД и дистрибутивов работа с патчами будет выглядеть аналогичным образом.
  • Не являюсь гуру Gentoo в частности и *nix-ов в целом, поэтому не исключено что уже имеются где-то оверлеи в которых уже все отлажено и готово к употреблению, а также существуют более красивые решения.
  • В данном случае поставленная цель достигнута, сервер БД установлен и инсталляция отражена в пакетном менеджере, так что какие-либо инструменты устанавливаемые в дальнейшем будут «знать» и работать с данной версией.
  • Если использовать USE=»-1c8″, то будет устанавливаться оригинальная версия с гентушными наработками без патчей от 1с.
  • Сам ни в коем случае не являюсь 1с-ником, то мои познания в этой области заканчиваются инсталляцией и демонстрацией запуска 1с-ки. Так что если есть какие баги, то я о них пока не знаю.
  • Моя первая статья, надеюсь кому поможет.

Ресурсы

  • man ebuild
  • man make.conf
  • man patch
  • man diff
  • СУБД PostgreSQL
  • Патчи компании 1С для СУБД PostgreSQL
  • FTP-сервер компании Etersoft

Другие рецепты инсталляций

  • Ubuntu
  • RPM дистрибутивы
  • Статья на хабре
  • И еще масса вариаций рассказывающих «как я с другом ставил…» — вносящие корректировки в уже обкатанные рецепты.

Файлы

В архиве прилагается готовый ebuild и результирующий патч Медиа:Gentoo-postgresql-1c8.zip.

Понравилась статья? Поделить с друзьями:
  • Как установить питон на windows 7 через cmd
  • Как установить пасьянс паук на windows 10 на русском
  • Как установить питон на windows 10 ютуб
  • Как установить пасьянс косынка на windows 10
  • Как установить паскаль абс на windows 7