Ручная сборка PostgreSQL для 1C 8.2, или легкие пути не для нас!

    В статье рассказывается про ручную сборку базы данных PostgreSQL для 1C под Gentoo Linux.
    Не буду рассказывать о всех тупиковых ветвях нашего лабиринта сборки постгреса для 1С. Опишу только то, чего нигде в интернете нет — то, что мы раскурили методом научного тыка. Несмотря на обилие мануалов по установке постгреса для 1C, ни один из них не решил наших основных граблей, все они оказались поверхностными и ничего не объясняли. Поэтому мы посчитали своим долгом восполнить этот пробел :-)


    Начну с того, что мы используем Gentoo, и никакие RPM пакеты у нас не ставятся. Пакет 1C в формате rpm для Gentoo установить не представлялось возможным (долго объяснять почему), поэтому скачать src.rpm и автоматически собрать его при помощи rpmbuild отпадало. Нам оставалась единственная возможность — перевести rpm2tgz из rpm формата в простой архив tar.gz и распаковать его, что мы и сделали. А далее приводится пошаговое руководство.

    0. Готовим окружение: mkdir /tmp/t5 && cd /tmp/t5 (было 5 стартов с самого начала :-)

    1. Качаем с официального сайта пакет со всеми требуемыми файлами: wget v8.1c.ru/overview/postgresql_patches/8-4-1/postgresql-8.4.1-1.1C.src.rpm

    2. Выполняем: rpm2tar postgresql-8.4.1-1.1C.src.rpm && rm postgresql-8.4.1-1.1C.src.rpm

    3. Распаковываем архив: tar xf postgresql-8.4.1-1.1C.src.tar. Все файлы распакуются в текущую директорию, поэтому лучше все же это делать в чистой папке. Также сразу распакуем postgresql-8.4.1.tar.bz2 и перейдем в эту папку:
    tar xfj postgresql-8.4.1.tar.bz2 && cd cd postgresql-8.4.1

    4.Открываем файл ../postgresql-8.4.1C.spec и очень долго его изучаем :-) В нем описано все то, что сделал бы rpmbuild (если бы все было так просто!). Находим секцию, где накладываются патчи, и в такой же очередности начинаем это делать (из папки с постгресом):

    patch -p1 < ../rpm-pgsql.patch
    patch -p1 < ../postgresql-logging.patch
    patch -p1 < ../postgresql-perl-rpath.patch
    patch -p1 < ../postgresql-prefer-ncurses.patch
    patch -p0 < ../1c_FULL_84-0.19.2.patch (p0, не p1!)
    patch -p1 < ../postgresql-1c-8.3.patch — пошли приколы, патч не накладывается! И это в официальной поставке. Мы так и не нашли, что меняет rpm spec, чтобы такой патч наложился. Благо, патч этот маленький и понятный, просто меняет опции конфига по умолчанию, поэтому мы потом после установки вернемся, и поправим конфиг ручками. А пока забили на это и идем дальше.
    patch -p0 < ../applock-1c-8.4.0.patch

    5. Дальше изучаем секцию build rpm spec, и смотрим, с какими параметрами вызывается configure. Трудно верится, что 1С будет использовать perl, python или tcl (а базу мы поднимаем исключительно для 1С, не хочется держать в запиленной разработчиками 1С базе свои другие базы, пусть живут в нормальном оригинальном постгре), поэтому эти опции просто игнорируем. Итого, что мы использовали:
    ./configure --disable-rpath --enable-nls --disable-integer-datetimes --enable-thread-safety

    6. make && make install. Корень постгреса скопируется в /usr/local/pgsql.

    Далее надо установить дополнительные библиотеки из папки contrib. Помните, один патч не наложился? Он добавляет в contrib/Makefile 3 дополнительных либы от 1С: mchar, fulleq и fasttrun. Для сборки mchar потребуется дополнительный компонент ICU версии 3.8. Поэтому сделаем небольшое отступление и поставим его:

    mkdir /tmp/icu && cd /tmp/icu && wget download.icu-project.org/files/icu4c/3.8.1/icu4c-3_8_1-src.tgz
    tar zxf icu4c-3_8_1-src.tgz && cd icu/source
    ./configure --prefix=/usr/local/icu && make && make install

    ICU поставится по отношению к /usr/local/icu. Но нам потребуется лишь подключаемая во время исполнения библиотека, поэтому после установки постргеса мы эту папку прибьем.

    Вернемся к сборке contrib.
    cd /tmp/t5/postgresql-8.4.1/

    7. Надо отредактировать файл contrib/mchar/Makefile и поправить PG_CPPFLAGS на путь к ICU:
    PG_CPPFLAGS=-I/usr/local/icu/include.
    Также поправить путь в SHLIB_LINK в самом низу в том же файле:
    SHLIB_LINK += -L/usr/local/icu/lib -licuuc -l$(ICUNAME) -Wl,-rpath,'$$ORIGIN'

    8. Далее добавляем ручками три 1С-ых компонента в WANTED_DIRS в файле contrib/Makefile (38 строка, см. v8.1c.ru/overview/postgresql_patches/8-4-1/postgresql-1c-8.4.patch):
    vacuumlo \
    mchar \
    fulleq \
    fasttrun

    9. Соберем contrib:
    make -C contrib && make -C contrib install

    10. Ручками скопируем требуемые ICU библиотеки в папку с либами постре:
    cp -a /usr/local/icu/lib/* /usr/local/pgsql/lib/
    rm -rf /usr/local/icu

    11. Постргес собран и установлен в /usr/local/pgsql. Конфиги пока править не будем. Создадим системный эккаунт, под которым будет работать база:

    useradd -d /usr/local/pgsql/ -s /bin/bash pgmaster
    mkdir /usr/local/pgsql/data
    chown pgmaster /usr/local/pgsql/data && chmod 700 /usr/local/pgsql/data
    cat >> /usr/local/pgsql/.bash_profile <<EOF
    export LANG=ru_RU.UTF-8
    export PGPORT=5434
    export PATH=/usr/local/pgsql/bin:/usr/local/pgsql/sbin:$PATH
    export LD_LIBRARY_PATH=/usr/local/pgsql/lib
    EOF

    У нас на сервере уже работает один постргес, поэтому для 1С мы выбрали другой порт и системный эккаунт, создали баш профайл, выполняемый при su — pgmaster, таким образом устанавливаются все пути и переменные.

    12. Инициализируем и запустим базу:

    mkdir /usr/local/pgsql/log && chown pgmaster /usr/local/pgsql/log
    su — pgmaster
    initdb -D /usr/local/pgsql/data
    postgres -h 0.0.0.0 -p 5434 -D /usr/local/pgsql/data

    Сервер тихо запустился без потери управляющего терминала.
    Сменим пароль суперюезру (screen рулит, хе-хе):

    su — pgmaster
    psql template1
    psql (8.4.1)
    Type «help» for help.
    template1=# alter user pgmaster with password 'pass-pass';
    ALTER ROLE
    template1=#
    CTRL+D

    А теперь потушим постргрес в первой консоли по CTRL+C, и пора править конфиги.

    13. Файл data/pg_hba.conf, в нем надо trust поменять на md5, а также добавить запись, разрешающую заходить по сети:

    local all all md5
    host all all 127.0.0.1/32 md5
    host all all 0.0.0.0/0 md5

    14. Файл data/postgresql.conf, в нем надо установить следующие опции (часть из не наложенного патча, часть для отладки):

    log_destination = 'stderr'
    logging_collector = off # выключим пока генерацию логов в data/pg_log, будет выводить в консоль)
    log_statement = 'all' # хотим видеть, что будет 1С выдавать в базу!
    listen_addresses = '*' # на каких интерфейсах слушать
    effective_cache_size = 512MB # рекомендация 1С
    max_locks_per_transaction = 150 # рекомендация 1С

    15. Разделяемая память. Либо sysctl -w kernel.shmmax=256000000, либо отредактировать /etc/sysctl.conf, добавить туда kernel.shmmax = 256000000, и далее sysctl -p.

    16. А теперь начинается самое интересное. Запускаем снова постргес (postgres -D data -p 5434). Подключаемся и создаем базу для 1C:

    $ psql template1
    Password:
    psql (8.4.1)
    Type «help» for help.
    template1=#

    17. Далее надо в базе template1 создать язык plpgsql:

    template1=# create language plpgsql;
    CREATE LANGUAGE
    template1=#

    18. Далее надо залить в нее SQL-код из 3-х компонентов от 1С. Нигде в интернете про эту операцию не сказано. Мы изучили весь RPM spec, выполняли make check, test и тд. Но так и не нашли, каким образом в RPM пакетах в template1 попадает весь этот код. Поэтому мы делаем эту руками:

    template1=# \i /tmp/t5/postgresql-8.4.1/contrib/mchar/mchar.sql
    template1=# \i /tmp/t5/postgresql-8.4.1/contrib/fulleq/fulleq.sql
    template1=# \i /tmp/t5/postgresql-8.4.1/contrib/fasttrun/fasttrun.sql

    Если вдруг ругается на подгрузку mchar.so, которая в свою очередь не нашла libicu*, значит забыли про LD_LIBRARY_PATH или скопировать ICU либы в /usr/local/pgsql/lib, читайте сначала :-P

    19. Но и это не все!!! Самая главная пробка, из-за которой не могли двигаться далее. Натравливаем на базу 1C, смотрим в логах:

    LOG: statement: select 1 from pg_proc where proname in ('plpgsql_call_handler', 'datediff', 'mchar_in', 'mc_mv_icase_cmp', 'fasttruncate')

    И после этого 1С говорит: «Плохая у вас база данных, не подходит».
    Вводим этот запрос с консоли:

    template1=# select 1 from pg_proc where proname in ('plpgsql_call_handler', 'datediff', 'mchar_in', 'mc_mv_icase_cmp', 'fasttruncate');
    ?column?
    — 1
    1
    1
    1
    (4 rows)

    Четыре единички, а вроде должно быть пять! Методом исключения обнаруживаем, что отсутсвует datediff. Попытки отыскать ее в папке с postgresql и в патчах 1С к успеху не приводят:

    snowflake local # cd /tmp/t5/
    snowflake t5 # ls
    1c_FULL_84-0.19.2.patch pg_config.h postgresql-8.4.1C.spec postgresql.pam
    applock-1c-8.4.0.patch postgresql-1c-8.3.patch postgresql-8.4.1.tar.bz2 postgresql-perl-rpath.patch
    ecpg_config.h postgresql-8.4.1 postgresql-bashprofile postgresql-prefer-ncurses.patch
    filter-requires-perl-Pg.sh postgresql-8.4.1-1.1C.src.tar postgresql.init README.rpm-dist
    Makefile.regress postgresql-8.4.1-A4.pdf postgresql-logging.patch rpm-pgsql.patch
    snowflake t5 # fgrep -ri datediff *
    snowflake t5 #

    Нашли в интернете какую-то функцию datediff. Догадались вообще зачем это нужно, и вообще зачем все эти патчи нужны. Вместо адаптации 1С к постргесу, разработчики решили адаптировать постгрес, чтобы SQL был похож на MSSQL! Вот и понапихивали туда функций и типов! Ну да ладно, datediff мы нашли.

    На всякий случай вот ее код:
    CREATE OR REPLACE FUNCTION datediff(character varying, timestamp without time zone, timestamp without time zone)
    RETURNS integer AS
    $BODY$
    DECLARE
    arg_mode alias for $1;
    arg_d2 alias for $2;
    arg_d1 alias for $3;
    BEGIN
    if arg_mode = 'SECOND' then
    return date_part('epoch',arg_d1) — date_part('epoch',arg_d2);
    elsif arg_mode = 'MINUTE' then
    return ceil((date_part('epoch',arg_d1) — date_part('epoch',arg_d2)) / 60);
    elsif arg_mode = 'HOUR' then
    return ceil((date_part('epoch',arg_d1) — date_part('epoch',arg_d2)) /3600);
    elsif arg_mode = 'DAY' then
    return cast(arg_d1 as date) — cast(arg_d2 as date);
    elsif arg_mode = 'WEEK' then
    return ceil( ( cast(arg_d1 as date) — cast(arg_d2 as date) ) / 7.0);
    elsif arg_mode = 'MONTH' then
    return 12 * (date_part('year',arg_d1) — date_part('year',arg_d2))
    + date_part('month',arg_d1) — date_part('month',arg_d2);
    elsif arg_mode = 'QUARTER' then
    return 4 * (date_part('year',arg_d1) — date_part('year',arg_d2))
    + date_part('quarter',arg_d1) — date_part('quarter',arg_d2);
    elsif arg_mode = 'YEAR' then
    return (date_part('year',arg_d1) — date_part('year',arg_d2));
    end if;
    END
    $BODY$
    LANGUAGE plpgsql VOLATILE
    COST 100;

    Внимание! Форматирование текста на хабре заменяет знак минус на дефис. Скопируйте текст процедуры сперва в текстовый редактор, и там массово замените длинный дефис на короткий минус, иначе постгрес будет ругаться :-)

    Посчитаем снова единички :-)

    template1=# select 1 from pg_proc where proname in ('plpgsql_call_handler', 'datediff', 'mchar_in', 'mc_mv_icase_cmp', 'fasttruncate');
    ?column?
    — 1
    1
    1
    1
    1
    (5 rows)

    Типа ура! Но не тут-то было :-) По 10 раз пересчитываем функции, их пять. И у нас пять! А 1С при запуске все равно говорит, что база у нас плохая, и дальше не идет. Смотрим еще раз все (пару штук всего!) начальные запросы при конфигурировании 1С. Понимаем, что все, что она может, это посчитать еденицы! Но их же 5!!!
    Этого результата мы добились часа через 3 после скачивания архива с сайта 1С. Далее начались пляски с бубном. Многочисленные пересборки, попытки качать разные версии, дистрибутивы от Этерсофта… Но на выходе результат один: пять функций, пять едениц. Хоть об стену головой.
    И тут пришла в голову идея выполнить эту процедуру на рабочей конфигурации… Высылаем текст по почте товарищу, он скармливает его в базу, и высылает результат:

    demo=# select 1 from pg_proc where proname in ('plpgsql_call_handler', 'datediff', 'mchar_in', 'mc_mv_icase_cmp', 'fasttruncate');
    ?column?
    — 1
    1
    1
    1
    1
    1
    (6 rows)

    У нас тихий ступор. Мысли шевелятся с трудом. Кто-то замечает, что видимо, каких-то процедур больше одной :-))
    Логично. Методом тыка по почте выясняем, что plpgsql_call_handler в двух экзмеплярах. Вызов select * from pg_proc where proname='plpgsql_call_handler' на demo машине выдал две идентичные записи, за исключением поля pronamespace.
    Далее долгие попытки руками воткнуть запись в системную таблицу pg_proc, ругань на скармливаемые значения.
    Снова ступор. Причина понятна, что делать — нет.
    И тут набираем в яндексе одно слово: plpgsql_call_handler (до этого пытались выгуглить сочетания разные). На первом месте сайт www.samag.ru/art/10.2004/10.2004_07.html, где написано:

    Далее, нам нужно убедиться, что процедурный язык PL/pgSQL доступен в созданной базе. Для этого выполните следующую команду:

    select * from pg_language;
    Если plpgsql в полученном результате отсутствует, то из командной оболочки вашей ОС выполните следующую команду:

    $ createlang –U pgsql plpgsql eshop
    Опция –U задает пользователя – администратора БД, от имени которого будет выполняться данная операция.

    Поддержка языка может быть включена и из программы-клиента (например, psql) выполнением следующих двух команд:

    create function plpgsql_call_handler()
    returns language_handler
    as ‘$libdir/plpgsql’, ‘plpgsql_call_handler’
    language ‘c’;
    create trusted procedural language ‘plpgsql’
    handler plpgsql_call_handler;
    Первая из них создает функцию-обработчик на базе библиотечной функции, вторая – собственно язык PL/pgSQL на основе созданного выше обработчика.


    И тут осенило — создать такую же процедуру еще раз :-P
    Заливаем процедуру в базу:
    create function plpgsql_call_handler()
    returns language_handler
    as '$libdir/plpgsql', 'plpgsql_call_handler'
    language 'c';

    template1=# create function plpgsql_call_handler()
    template1-# returns language_handler
    template1-# as '$libdir/plpgsql', 'plpgsql_call_handler'
    template1-# language 'c';
    CREATE FUNCTION
    template1=# select * from pg_proc where proname='plpgsql_call_handler';
    proname | pronamespace | proowner | prolang | procost | prorows | provariadic | proisagg | proiswindow | prosecdef | proisstrict | proretset | provolatile | pronargs | pronargdefaults | prorettype | proargtypes | proallargtypes | proargmodes | proargnames | proargdefaults | prosrc | probin | proconfig | proacl
    ----------------------+--------------+----------+---------+---------+---------+-------------+----------+-------------+-----------+-------------+-----------+-------------+----------+-----------------+------------+-------------+----------------+-------------+-------------+----------------+----------------------+-----------------+-----------+--------
    plpgsql_call_handler | 11 | 10 | 13 | 1 | 0 | 0 | f | f | f | f | f | v | 0 | 0 | 2280 | | | | | | plpgsql_call_handler | $libdir/plpgsql | |
    plpgsql_call_handler | 2200 | 10 | 13 | 1 | 0 | 0 | f | f | f | f | f | v | 0 | 0 | 2280 | | | | | | plpgsql_call_handler | $libdir/plpgsql | |
    (2 rows)

    Вот они :-)
    Проверим:

    template1=# select 1 from pg_proc where proname in ('plpgsql_call_handler', 'datediff', 'mchar_in', 'mc_mv_icase_cmp', 'fasttruncate');
    ?column?
    — 1
    1
    1
    1
    1
    1
    (6 rows)

    Финал — создаем базу из template1:

    template1=# create database enterprise;
    CREATE DATABASE

    А теперь запускаем 1С и натравливаем на enterprise… О чудо! База данных создалась, и 1С залила всю структуру.

    А теперь вопрос. Зачем программистам 1С в базе две одинаковых процедуры???
    :-)))

    P.S. Потом когда игрались, удаляли datediff, обнаружили, что она зависит от plpgsql_call_handler:
    template1=# drop language plpgsql;
    ERROR: cannot drop language plpgsql because other objects depend on it
    ПОДРОБНО: function datediff(character varying,timestamp without time zone,timestamp without time zone) depends on language plpgsql
    Но все равно так и не поняли, откуда она берется в собранных дистрибутивах Етерсофта или 1С :-))
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 85

      0
      Плюс в карму хотя бы за упорство.

      В этой постгре черт ногу сломает, про единички просто убило)

      В тегах лучше поставить pgsql/postgresql, чтобы кто-нибудь наткнулся в будущем на статью и не тратил 3 часа на сборку и установку бекенда.
        0
        Добавил в тэги.
        Спасибо :-)
        0
        Году в 2005-2006 я сильно любил gentoo, но потом моё время стало дорогим и я познал счастье deb.
        Хорошая статья :)
          +4
          А вот я совсем наоборот, после того как «приобщился» к gentoo забыл про все остальное в качестве серверных ОС, поскольку на Deb или чем-то другом rpm'ном практически не возможно завести какую-нибудь хитрую комбинацию софта… Приходилось половину системы выкашивать… После того как познал gentoo, забыл про эти проблемы…
            +1
            Ага :-)
              0
              А что мешает пакет то собрать нужный из сырцов?
                0
                Ручками если собирать да ставить — нет инструмента удаления пакетов, отслеживания коллизий. Да много чего :-)
                Не зря же менеджеры пакетов придумали.
                  0
                  Не понял, если вы пакет собрали, зависимости то понятны же какие. Я именно про сборку пакетов, а не gentoo way в дебиане как некоторые любят.
                    0
                    Вы про сборку ebuild'a?
                      0
                      Видимо да, кстати неплохо бы layman сделать. Что бы другие не мучились :)
                0
                На бубунте завёл зеркало OSM сервера.
                Собирал из сорцов все его компоненты кроме pgsql ничего не выкосил пол системы ;)
                  0
                  это о чем-то говорит? кроме как о том что вы собрали из сорцов OSM сервер? это доказывает что на бубунте также легко собирать нужное ПО с нужными версиями либов как на gentoo?
                    0
                    Нет просто для ОСМ сервера надо было собрать очень много всего, в том числе и системного, а не просто ОСМ сервер
                    PS
                    ЗЫ www.openstreetmap.org
              +8
              Я так понимаю, что за все эксперименты заплатил Ваш работодатель?

              Немного поясню свою мысль.

              Производитель ПО выложил протестированные и готовые к использованию пакеты для определенной ОС, производитель дает гарантии работоспособности и поддержки в случае если используется только данная ОС.

              Вы Вместо того чтобы выбрать инструмент исходя из потребностей выбираете совершенно другой инструмент исходя из собственных предпочтений, мучаетесь неделю или две стараясь заставить его работать.

              Внимание вопрос в курсе ли работодатель что вы просто «украли» у него две недели Вашего рабочего времени?

              В курсе ли работодатель, что Вы сделали костыль гарантии работоспособности которого не даст никто?

              Все больше утверждаюсь в мысли, что существует класс людей обладающих определенными знаниями, но которых надо принудительно изолировать и не давать возможности пользоваться данными знаниями — так как они дискредитируют и портят имидж своей профессии.
                +2
                Упорство — это когда вводишь пароль до тех пор, пока система не соглашается. Автору просто за упорство плюс )))
                  +3
                  Не спорю, автор стал обладателем уникальных знаний, но проблема в том, что он нигде не сможет ими воспользоваться — такими вещами НИКТО в продакшн заниматься не станет, ибо любой сбой может обернуться не кислыми проблемами за которые понесет ответственность наш дорогой litnimax.

                  Или если переходить на аналогии, то его уникальные знания, это как член длинною в метр — очень круто, но абсолютно бесполезно.
                    +2
                    Если в будущем возникнет проблема и не будет инструкции по ее решению, то автор решит проблему, а некоторые встанут в ступор.
                      +3
                      > автор стал обладателем уникальных знаний, но проблема в том, что он нигде не сможет ими воспользоваться

                      Скачав пакет от Етерсофт, заметил патчик к патчам от 1С. Видимо, ребята из Етера не только воспользовались полученными ранее знаниями, но еще и проблемы порешали.
                      Мы также пока ставили все патчи, внимательно изучали, что они делают.
                      Теперь, если база будет себя неадекватно себя вести, будет хорошее представление, куда рыть.

                      А вот если бы я это не написал, точно бы знания зря пропали. Во всех статьях просто детский сад.
                      Если у Вас нет MVARCHAR, значит нет библиотеки ICU. Установите библиотеку, и переинициализируйте базу данных.

                      Вот ответ «профессионалов» консультантов. Шаг влево-вправо — они руки разводят. Ибо просто не понимают основополагающих механизмов.
                        +5
                        То что вы пишите, это всё хорошо и правильно, НО в теории!
                        Видимо с 1С вы общаетесь мало, иначе не стали бы поминать гарантии работоспособности от 1С!
                        Уж, поверьте если бы всё было так просто, кому бы сдались услуги интеграторов по настройке серверов, все бы просто ставили 1С пакетик и радовались жизни, до поры до времени…

                        Про саму 1С бухгалтерию я вообще молчу, именно «гарантии работоспособности от 1С» породили полчища «1С-Програмист-ов» как профессию.
                        Ибо даже в пределах банальных стандартных конфигураций, админ не справится, особенно если разрешит авто-обновления, которые могу оказаться губительно сырыми для БД или не вполне работоспособными для бухов.
                        (Мои бухи уже знают что такое xml и как его править руками, что бы такском съел выгрузки из 1С)
                        А ещё у 1С есть такая конфигурация как «Зарплата и управление персоналом» — ЗУП в простонародье, которая сделана через ЖОПУ (я не побоюсь этого слова), так что порою разобраться в ней нереально даже человеку много лет проработавшему интегратором 1С решений. Тут нужно банальное знание того как именно она сделана, и никак иначе.
                        В общем петь дифирамбы 1С можно ещё долго, и я это всё к чему…

                        … К тому что чувак не зря потратил время, если он научился настраивать работоспособный сервер для 1С, то это дорого стоит в прямом смысле слова дорого, и работодателю тоже не стоит расстраиваться тк, это не просто экономия, это безопасность бизнес процессов, ведь базы имеют обыкновение падать именно тогда, «когда надо было ещё вчера»…
                        Конечно сервачёк, надо по тестировать под нагрузочкой, припаять туда авто бэкап базы (ой как порою помогает, особенно когда «надо было вчера»...), взять какую нить олдовую базу, последовательно по накатывать обновления, и если это действительно работает стабильно то, работодателю не о чем будет париться, а у сотрудника может появиться не плохой источник дополнительного дохода :-)
                          0
                          > Конечно сервачёк, надо по тестировать под нагрузочкой
                          Парни, мы раньше сидели на SaaS'овских приложениях по учету торговлей и складом, вконец упарившись, решили уйти на 1C. Так что эпопея только началась :-)

                          Я бы с радостью поставил OpenERP например, но только адаптировать ее полностью свосем жестко будет. Да, забыл сказать, у нас в компании винды до сих пор не было! Из-за 1С пришлось себе на горло наступить :-P
                            +2
                            >> К тому что чувак не зря потратил время, если он научился настраивать работоспособный сервер для 1С, то это дорого стоит в прямом смысле слова дорого, и работодателю тоже не стоит расстраиваться тк, это не просто экономия, это безопасность бизнес процессов, ведь базы имеют обыкновение падать именно тогда, «когда надо было ещё вчера»…

                            Знаете, я немало поднял связок Win Srv + MS SQL + 1c v7.7 / 1c v8.x. Даже при физическом умирании сервера максимум что требовалось — достать mdf, сама по себе база никогда не рушилась, я молчу про бакапы. Так что «понимание как работает сервер для 1С» здесь следует читать как «понимание как сделать PostgreSQL сервер для 1С Предприятия если „по каким-то причинам“ не можется /не хочется/ использовать поддерживаемые решения», т.е. случай крайне редкий, и нужный только ограниченному кол-ву людей.

                            О «безопасности бизнесс процессов» в свете использользования патченного руками и кое-как собранного софта я промолчу.
                              0
                              Мне интересно, почему софт, пропатченный руками разработчика — это надежно, а тот же софт, пропатченный руками другого не менее, а скорее более компетентного в системных вопросах — не надежно :-)
                                +1
                                Не стоит забывать, что помимо накладывания патчей на исходные тексты перед работой следует еще и этап компиляции.
                                  0
                                  ээээ… не понял? :-)
                                    0
                                    Я к тому, что этот разработчик не только код правит, но и компилирует известным ему правильным методом.
                                      0
                                      Ну вообще-то инструкции по сборке тоже входят в пач, а именно в Make-файлы. Разве что речь идет о дистрибьюции в бинарном виде. Но и там Linux дает мощные инструменты реверс-инжиниринга.
                                  +1
                                  Я исхожу из принципа что, если пропатчил разработчик, то даже если криво — это известно многим (ибо тупо вылезает у многих), если пропатчил внутренний работник — то есть отличный от нуля шанс что будет что-то уникальное, соответственно «если чё» может потребоваться дохрена времени и ресурсов для восстановления для поиска в чём дело, а это более опасно для БП чем «известные» проблемы от разработчика.
                                  Это не отменяет поправки на квалификацию человека патчевшего сервис.

                                  ЗЫЖ я в аутсорсинге работаю, у нас иногда радикально подход отличается от in house ;)
                              +1
                              Все вы верно говорите. Кроме одного. Кто понесет ответственность при некислом сбое на типовой конфигурации, производитель? В лицензии обычно пишется отказ от любой ответсвтенности. Так вот при некислом сбое шанс оживить систему будет гораздо выше именно у этого админа.
                            0
                            Подождите-подождите, вы о каких таких протестированных версиях, поддерживаемых разработчиком, говорите? О постгрессе для центоси от 1С?? Да это глюкавое убожество, сделанное на коленке школьниками, конечно установка всего этого добра под генту ничего не исправит, но всё же называть постгресс от 1С протестированным продуктом…
                              +1
                              я об этом v8.1c.ru/overview/postgresql_patches/8-4-1/postgresql-8.4.1-1.1C.src.rpm
                              Рекомендованная 1c версия PostgreSQL под Linux. Кривая или нет, это совсем не тот вопрос. Вопрос в том поддерживаемая или нет.

                              Насчет сапорта ради интереса попробуйте обратиться в сапорт 1c с вопросом «я тут пересобрал PostgreSQL из сорцов с вашими патчами под МОЙ_ЛЮБИМЫЙ_ДИСТРИБУТИВ и у меня не работает» и будете крайне удивлены.
                                0
                                Из вашей последней фразы можно выкинуть вопрос и суть останется такой же: обращаться в саппорт 1С бесполезно практически по всем вопросам, по техническим — уж точно. Тем более не совсем понятно как можно добиться такой ситуации, что постгресс, который преспокойно собирается на всех платформах, вдруг после извращений со стороны 1С собираться перестаёт.
                                  0
                                  В году эдак 2003 я работал сисадмином в операторе IP телефонии, по совместительству админом Sybase, а также админом биллинга.
                                  Мы заплатили 3 штуки гринов за поддержку оперативную (типа оператор телефонии, важна скорость). Так вот, когда в один чудесный день база залочилась, поддержка нервно курила до 19 часов, а потом спать пошла. А мне пришлось до утра курить sybase, и в итоге откатить базу на момент аварии (благо недавно только открылись, клиентов мало было). А поддержка так и не разобралась. А еще дня через три мы смогли не только восстановить (спорта ради) поврежденную копию, да еще и оттюнили базу так, что летала как ракета. Так что на суппорт я разучился полагаться уже давно.
                                    0
                                    Можно найти интервью, почему штатный PGSQL их не устраивал, полезно для самообразования.
                                    Вкратце и утрированно — PGSQL знать не знает про какую-то там кириллицу.
                                      0
                                      LOL :-)
                                      база в кодировке ru_RU.UTF-8 :-)
                                        0
                                        ./configure --enable-nls :-P
                                          0
                                          Я ж говорю «утрированно».
                                          Дело в сортировках, искать оригинальное интервью лень, вот тут postgresql.ru.net/node/29777 чуть-чуть есть информации.
                                            0
                                            именно по означенной причине, для интеграции с 1C в PostgreSQL добавлен патч, предоставляющий специальный тип mchar, который как раз и не чувствителен к регистру при операциях сравнения
                                    0
                                    у вас в профиле ЦентОС написано
                                    и да, возможно это от вас надо изолировать профессию, а то знаете ли сисадмин гордящийся своими сертификатами и умением делать всё по инструкции сертифицированными методами это нихрена не сисадмин
                                      0
                                      Я себя стал ловить на мысли, что я последнее время делаю по инструкциям. Это с одной стороный хорошо, но с другой стороны, натаскают на курсах тебя кнопочки тыкать, дадут сертификат, а дальше… дальше всё грустно.
                                  +11
                                  > Я так понимаю, что за все эксперименты заплатил Ваш работодатель?
                                  Эээ… вообще-то я совладелец собственной компании, и к сожалению, свои 10 лет опыта линукса передать сотрудникам как-то сходу не получается :-) Поэтому периодически закатываю рукава и показываю «кто тут папа» :-)
                                  Сел за комп вчера в 12 утра. Встал сегодня в 6. Итого, 18 часов ушло на то, чтобы полностью разобраться в вопросе того, что же из себя представляет пострес от 1С. Теперь мы можем ее поднять из исходников на любом сервере.

                                  > Внимание вопрос в курсе ли работодатель что вы просто «украли» у него две недели Вашего рабочего времени?
                                  18 часов, а не две недели. При этом я еще отвлекался на чтение почты, просмотр и отписку в тикеты по разработке других продуктов, общение на форуме :-P

                                  > В курсе ли работодатель, что Вы сделали костыль гарантии работоспособности которого не даст никто?
                                  Уважаемый. Воздержитесь от таких выводов :-) Мы постигали суть вещей, а не костыли делали!
                                  Нормальные разработчики адаптируют свои продукты к мэйнстриму, а не наоборот!

                                  Все больше утверждаюсь в мысли, что существует класс людей обладающих определенными знаниями, но которых надо принудительно изолировать и не давать возможности пользоваться данными знаниями — так как они дискредитируют и портят имидж своей профессии.

                                  А еще есть хакеры в настоящем первозданном смысле этого слова, для которых не бывает нерешаемых задач :-)

                                  > так как они дискредитируют и портят имидж своей профессии.
                                  Политика 1С такая — знания дают только своим франчази, которые рубят денег с интеграции. И только и слышишь истории, как ходят месяцами «бизнес-анализ» делают, потом что-то «пишут», а потом проект стоимостью в 3 ляма рублей проваливается, так и не заработав. Так что не надо о «профессионалах», знаем таких немало. В общем, не хочу ввязываться в спор. Я понял типаж, который Вы имели в виду. Извините, не наш случай.
                                    +1
                                    Прошу пардона, не имел цели Вас оскорбить.

                                    >Я понял типаж, который Вы имели в виду. Извините, не наш случай.

                                    Радует.
                                      0
                                      странно. я нашёл патчи, скачал деб-срц постгресса, кинул патчи в нужный каталог, запустил пересборку — собралось. пакеты поставились, работают. на всё ушло часа два-три от момента, когда я узнал, что существует 1С под линукс.
                                    +2
                                    Вообще по тестам на РЕАЛЬНОЙ базе довольно крупного промышленного предприятия PostgreSQL с 1С работал примерно в 3-5 раз медленнее чем MS-SQL, конечно постгрес это БЕСПЛАТНО… но оно надо?
                                      –2
                                      Надо. Ибо на реальной базе не 1С посгресс работает быстрей, а дальше всё упирается в полную криворукость программистов 1С. Плюс ради 1С вводить в инфраструктуру серверы MS зачастую глупо, MS-SQL вообще странный продукт. Тогда уж ораклю надо, а не MS-SQL… Ну и в любом случае криворукость недопрограммеров из 1С ещё очень не скоро позволит этому комплексу нормально работать в принципе, не то, что нормально работать с постгрессом…
                                        +1
                                        Я говорю про абсолютно реальный тест, одна и та же база, не надо тему разговора переводить на 1С… С 1С все понятно и с их программерами тоже, я сильно глубоко знаю как эта штука работает поэтому прекрасно понимаю что работать нормально ОНА НЕ МОЖЕТ ПО ОПРЕДЕЛЕНИЮ, по карйней мере с планом счетов, структура хранени и самое главное блокировок не позволит :)

                                        Но а тестирование проводили для понимания стоит-ли платить за MS, выяснилось что стоит, база на постгресе крутилась «в тупую» в 3 раза медленнее… это факт жизни…
                                          0
                                          Я когда перешел в другую компанию работать, году эдак в 2004, там тот же биллинг, что мы sybase гоняли, работал под MSSQL. Потратил целый день на гуглинг по вопросам «MSSQL tuning». Потом не выдержал и позвонил товарищу мелкомягкому… Тот долго не мог понять, о каких именных кэшах для таблиц, индексов, и процедур я пытаюсь говорить. В потом в шоке был я — MSSQL не имеет механизма тонкой настройки.
                                          Это я к тому, что postgres в отличие от MSSQL обладает механизмами тюнинга. Видимо, в Вашем тесте ими не воспользовались :-)
                                            0
                                            Ибо какой бы кривой 1C ни была, SQL он и в африке SQL. И если один и тот же запрос работает в три раза быстрее на MSSQL, значит что-то не так…
                                              +1
                                              В корне не верное утверждение, ибо трэйс 1С'а характерен ОЧЕНЬ сложными запросами, и вот тут в дело вступает оптимизация выполнения запроса и раскидка по потокам, правильная работа со статистикой… И быстродействие может отличаться, не то чтобы в разы, а на ПОРЯДКИ… SQL это совсем не линейный язык программирования :)
                                              +1
                                              Гугл на запрос google.com/search?q=mssql+tuning выдает 198 тысяч результатов. История про мелкомягкого товарища вообще притянута за уши. Либо приводите факты либо не пишите таких сообщений.
                                                0
                                                Я искал возможность точного управления выделением ресурсов под объекты баз данных. Не нашел. Их нет. Сравните, что выводит sybase tuning и mssql tuning.
                                            0
                                            При чем тут НЕ 1С?
                                            Вы вообще не в тему со своим ответом.
                                            На реальной базе в некоторых местах производительность на постгресе была в 100 раз хуже чем MSSQL.
                                            И, соответственно, когда на реальном предприятии возникает вопрос покупать ли MSSQL, то однозначный ответ — да, покупать.
                                            Потому что можно месяцами тюнинговать постгрес, а можно купить MSSQL и спокойно работать.
                                              0
                                              Самая большая база данных в мире — в Yahoo! И работает она на Postgesql
                                              habrahabr.ru/blogs/postgresql/26289/

                                              Вы просто не умеете ее готовить :-)
                                                0
                                                В прошлом году инженеры Sun показали всему миру, что PostgreSQL не уступает в производительности Oracle.
                                                postgresmen.ru/news/view/44

                                                MSSQL нервно курит :-) Похоливарим? :-P
                                            0
                                            MS-SQL не поддерживает большие запросы. Мы из-за этого и перешли на постгре.
                                              +6
                                              боюсь даже спрашить что для вас значит «большой запрос»…
                                                +2
                                                Другими словами вам оказалось мало 256 мегабайт в запросе?

                                                msdn.microsoft.com/en-us/library/ms143432.aspx
                                                0
                                                По тестам? Дайте мне SQL трейсы этих тестов, и я скажу Вам, в чем причина.
                                                Когда-то опять же в былое операторское время программист биллинга хвалился процедурами на 5 страниц А4. Которые при первом запуске ложили базу. А потом бегал и ныл типа оптимизируй… После оптимизации процедура отарабатывала за секунды.
                                                Вот такие обычно программисты :-)
                                                  +1
                                                  Да причем тут это, вы писали большие учетные системы на 1С? Или теоретизируете исходя из опыта SQL-программирования, это разные вещи… Запрос реальный формирует не программист, и блокировками некоторыми (например на таблицу с аналитикой) рулить не возможно, поэтому как ни пиши НИХРЕНА не выйдет… надо или полностью переписывать логику учетной системы, или менять некоторые места в самой платформе…
                                                    0
                                                    Ради интереса понаблюдаю, насколько 1С работает с уровнями изоляции транзакций :-)
                                                    Вообще я бы не хотел развивать тему плохой или хорошей 1С. Большой продукт. Хорошо, что на куски не развалился :-)
                                                    И в конце-концов, победителей не судят — ведь работает же несмотря ни на что?
                                                    Значит, не все так плохо.
                                                    Но уверен, с системной точки зрения есть запас для оптимизации.
                                                    Будем выживать. Я же написал, эпопея только начинается :-)
                                                      0
                                                      Гыгыг… насчет работает это да! :) но поковыряйтесь просто в структуре запросов и хранения, там далеко ходить не надо :) ключевое слово «таблички с буковками ED» и блокировки на них ;)
                                                  0
                                                  Не совсем понятно что вам не нравится. PostgreSQL или все же то как сделан 1C для PostgreSQL.
                                                  PostgreSQL отличная БД, понятно что opensource и в чем то может уступать MS-SQL, а в чем то и выигрывать (версионность).
                                                  Уверен что проблема в том, что 1С плохо оптимизирован по PostgreSQL.
                                                    0
                                                    По логике разработчиков из 1С это PostgreSQL плохо оптимизирован под их систему :)
                                                  0
                                                  На форуме gentoo.ru за такую сборку вас бы четвертовали ;). Надо было идти до конца и таки написать ebuild да и запихнуть его в локальный оверлей )
                                                    0
                                                    Гы. Соглсен. Не gentoo way. Но еще не вечер :-)
                                                    Пути поправим, ебилд сделаем. Просто у нас задача была развернуть изолированный постгрес, у нас же родной работает в нормальных путях. Вот и запхали в /usr/local/pgsql, тем более он сам туда полез :-)
                                                      0
                                                      Ну кстати мб и пригодится кому еще, так что не смею вас останавливать )
                                                      0
                                                      В свое время так и сделал. К счастью теперь не занимаюсь этими вопросами.
                                                      0
                                                      А не знаете чем 1C не угодил стоковый постгресс?
                                                        0
                                                        Свои типы, операторы сравнения, сортировки — чтобы по минимому поддерживать разные диалекты SQL. IMHO.
                                                          0
                                                          Лучше бы слои совместимости написали между базой и программой. А то выглядит как один огромный костыль.
                                                          0
                                                          Не хватало какого-то функционала. Пропатчить постгрес было проще, чем адаптировать 1C.
                                                            0
                                                            www.inp.nsk.su/~baldin/PostgreSQL/1C/1C.html
                                                            Это, правда, старое интервью, возможно с того момента действительно договорились с постгресовцами и часть уже штатно в нём есть.
                                                            0
                                                            Не знаю, придётся ли в ближайшее время переходить на постгри, но комменты почитал с удовольствием…
                                                              0
                                                              У нас на серваке стоит PostgreSQL 8.4.5 с PostGIS на 5432 порту, под 1С установили 8.3.8 по данному руководству (5434-й порт). Возник вопрос (цитирую коллегу): «как правильно перенаправить 1С на этот порт». Может поможете советом? Заранее спасибо.
                                                                0
                                                                Да, 1С не понимает стандарт host:port.
                                                                Два варианта.
                                                                Системную посадить на 127.0.0.1:5432, а 1С-овскую — на 192.168.1.1:5432.
                                                                Параметр listen_addresses в postgresql.conf.

                                                                Если же к системной тоже по сети бегают, то надо также разделить по адресам, но уже оба сажать на eth0 — Поднять алиас ifconfig eth0:0 192.168.100.2 например.
                                                                –1
                                                                когда же этот уебский 1С наконец отдаст концы
                                                                  0
                                                                  OpenERP в массы! :-)
                                                                  • UFO just landed and posted this here
                                                                      0
                                                                      Не на чем было их выполнять. Да и не особо хотелось. Хотели ручками, до самой глубины :-)
                                                                      0
                                                                      зачем использовать генту, если там всё нужно собирать вручную?
                                                                      убунту лучше!
                                                                        0
                                                                        на gentoo обычно никто руками не собирает, если только не желает потрахаться нестандартно…

                                                                        то же накладывание патчей и изменение параметров конфигурации делается изменением одного ebuild-файла за пять минут…

                                                                        да и чтобы поставить в другое место тоже немного усилий потребуется…

                                                                        зато был бы готовый ebuild, из которого можно бы было сделать patch и для последующих версий и автоматом накатывать…
                                                                        +1
                                                                        мм, если рассматривать это как искусство — преклоняюсь.
                                                                        если думать о том как вы будете обновляться (если 1с вдруг выпустит обновления) — очевидно что придется еще раз совершить весь танец с бубном

                                                                        помнится, был один ниндзя, запускавший оракл на фряхе… наверное стоит уже сделать блог «Перпендикулярно требованиям»
                                                                          0
                                                                          А нафига было собирать icu ручками с префиксом /usr/local/icu, если можно было сразу взять пакет icu-${VER}_dev или ic-${VER}-devel? Это тоже «чтобы никто не догадался»?

                                                                          По поводу ненакладываемых патчей: могли и src-пакеты кривой выложить. Если посмотреть, там и такое встречается:
                                                                          %patch1 -p1
                                                                          %patch3 -p1
                                                                          # patch5 is applied later
                                                                          %patch6 -p1
                                                                          %patch6 -p1 # почему дважды???
                                                                          %patch8 -p1
                                                                          %patch9 -p0
                                                                          %patch10 -p1
                                                                          %patch11 -p0
                                                                            0
                                                                            ICU в системе не нужна. От нее нужна только пару либ. Поэтому их берем, остальное сносим.
                                                                            Но в принципе да, можно.
                                                                            0
                                                                            Только что взяли постгрес от Етерсофта (в деб пакетах). Установили на дебиан.
                                                                            Так вот, все модули есть (mchar, и 2 других), но в базу содержимое скриптов, добавляющих эти типы, не попало. Вот так вот.

                                                                            Only users with full accounts can post comments. Log in, please.