В postgresql 8.4 есть небольшая особенность по сравнению с 8.3 - теперь блокировки таблиц вне транзакции запрещены и считаются ошибкой пользователя. Комментарий в оригинале предельно ясен: Disallow LOCK TABLE outside a transaction block (or function), since this case almost certainly represents user error. Ссылка на коммит - http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/tcop/utility.c.diff?r1=1.299;r2=1.300;f=h Вся беда в том, что 1С81 до сих пор пытается накладывать блокировки вне транзакций (видимо, чтение списка изменений к postgresql 8.4 сочли не обязательным, а на предупреждение в readme для fasttrun, гласящее "Warning: function isn't transaction safe!" вообще внимания не обратили). В результате, имеем кучу "глюков" после перехода на postgresql 8.4 с непроводящимися документами (легко воспроизвести в "бухгалтерии предприятия", попытавшись перепровести документы по основным средствам). Так что рекомендую включить в Ваши сборки postgresql 8.4 дополнительный патч, обратный описанному выше. И держать его до тех пор, пока сами 1С-овцы не поправят поведение своего замечательного продукта :)
Created attachment 1728 [details] снятие запрета на блокировки таблиц вне транзакций
Created attachment 1729 [details] очистка временых таблиц даже при наличии ссылок
Выложил 2 патча: 1. Отменяет запрет на блокировку таблиц вне транзакций 2. Разрешает очистку временных таблиц даже при наличии ссылок (1С чистит их через fasttrun)
Стас, будут комментарии, или можно просто патчи включать?
Второй патч(1729) можно так и приложить. Ничего в нем плохого не вижу, если 1с это не нравится. Только хочется узнать, как воспроизвести ошибку на 1с. А первый(1728), я сделал бы в виде отката коммита fc5af261e545646848ba8b0ce5b45115a76dc77b (хотя не принципиально).
Created attachment 1740 [details] Revert "Disallow LOCK TABLE outside a transaction block (or function), since this case" Откат коммита ограничевающего использование блокировок вне транзакций.
(In reply to comment #5) > Только хочется узнать, как > воспроизвести ошибку на 1с. У меня такая конфигурация: бухгалтерия предприятия 1.6, платформа 8.1.15, postgresql 8.4.3. Легко и непринужденно воспроизводится на документах по основным средствам. Например, создаем и проводим документ "Списание ОС", затем снова открываем документ и перепроводим его, получаем ошибку "основное средство уже списано документом №.... от ............". Самое смешное - что уже списано этим самым документом. При этом у документа снимается признак проведения, но его старые движения не вычищаются, а так и остаются висеть в таблице проводок. Далее все попытки провести документ бесполезны, ибо выскакивает все та же ошибка "основное средство уже списано документом №.... от ............". Это мы видим со стороны пользователя. Если же заглянуть в лог postgresql, то видим кучу ошибок о невозможности очистить временные таблицы, видимо 1с от этого паникует и останавливается на пол-пути, сняв признак проведения документа но не очистив движения. Хотя проведение документа должно выполняться в транзакции (BEGIN, удаляем старые движения, записываем новые, COMMIT), но видимо это не совсем так (да да, совсем не так как написано в желтых книжках от 1с :) В общем, ничего не изменилось с тех пор, как я осенью тестировал версию postgresql 8.4.1 с патчами от 1с, правда тогда еще был статус беты и я особо не заморачивался, ибо считал, что разработчики из 1с все оттестируют и поправят недоделки. Зря я так считал :) Пришлось самому поправить и теперь все работает. Остался только один странный баг - при формировании очень большого отчета (что-нить типа карточки счета на 5000 страниц печатного текста) postgresql 8.4.3 может призадуматься минут на 30-40, тогда как с версией postgresql 8.3.8 на формирование подобного отчета уходило 1-2 минуты.
Приложил патчи, собрал srpm и запустил на сборку. Версия 8.4.2. Пока можно протестировать на системах, для которых есть пакет.
(In reply to comment #8) > Приложил патчи, собрал srpm и запустил на > сборку. Версия 8.4.2. > Пока можно протестировать на системах, для > которых есть пакет. > 8.4.2? Так ведь последние патчи к postgresql 8.4.3 уже есть. Правда 1С их почему-то в открытый доступ не выложила. Если у Вас нет доступа к ним, могу здесь выложить. От себя могу добывить: за последние пару недель активного тестирования postgresql на sles11, opensolaris b134 и mac os 10.6 ошибок пока не наблюдаю
Собрал 8.4.4 с двумя патчами, о которых шла речь выше. Если можно, пришлите последние патчи.
(In reply to comment #10) > Если можно, пришлите последние патчи. отправил Вам на e-mail
(In reply to comment #11) > отправил Вам на e-mail > Спасибо, но от старых они почти не отличаются. Можно качать 8.4.4.
Закрываю.