Ошибка cache lookup failed for function 0 является одной из самых неприятных проблем при миграции баз данных 1С с MS SQL на PostgreSQL. Она часто проявляется при попытке проведения или распроведения документов, выполнении регламентных операций или выгрузке данных. Давайте подробно разберем, почему возникает эта ошибка и какие шаги необходимо предпринять для ее устранения.
Данная ошибка сигнализирует о том, что PostgreSQL не может найти запись в системном каталоге, соответствующую запросу платформы 1С. Основными причинами являются:
PostgreSQL от компании 1С не всегда корректно обрабатывают специфические SQL-запросы, генерируемые старыми конфигурациями (УПП 1.3, БП 2.0).pgAdmin) с отключенным автокоммитом транзакций могут возникать блокировки системных функций.Практика показывает, что наиболее эффективным и «чистым» решением является отказ от стандартной сборки PostgreSQL от 1С в пользу специализированных сборок от Postgres Pro. Эти сборки содержат дополнительные патчи, адаптированные под особенности работы платформы 1С.
Шаги по переходу:
pg_dump выдает ошибку, воспользуйтесь файловой выгрузкой в .dt).PostgreSQL.Postgres Pro для 1С.Многие пользователи отмечают, что после перехода на сборку от Postgres Pro проблема исчезает без необходимости модификации конфигурации.
Если вы используете конфигурацию «старой закалки», например УПП 1.3 или Бухгалтерия 2.0, проблему можно обойти, изменив режим совместимости в конфигураторе.
Порядок действий:
Режим совместимости.Версия 8.3.9 (или другую раннюю версию, если проблема сохраняется).Пример конфликта имен, который придется исправить вручную:
// В процессе проверки конфигурации могут быть обнаружены ошибки вида:
// Процедура или функция с указанным именем уже определена (СтрНайти)
// Необходимо переименовать дублирующие функции в соответствующих модулях.
Изменение режима совместимости заставляет платформу 1С генерировать более «консервативные» SQL-запросы, которые корректно обрабатываются PostgreSQL без обращения к несуществующим функциям кэша.
Иногда ошибка носит временный характер и связана с нехваткой ресурсов или «зависанием» кэша СУБД.
Что следует проверить:
PostgreSQL иногда помогает «очистить» сбойный кэш функций.pg_dump приводит к ошибкам выделения памяти, которые интерпретируются как сбои СУБД.pgAdmin, убедитесь, что параметр autocommit установлен в значение true. Работа с включенным ручным подтверждением транзакций (autocommit=false) в среде PostgreSQL часто приводит к блокировкам системного уровня.В данной ситуации не стоит тратить время на бесконечные попытки Тестирования и исправления (ТИИ) с полной реструктуризацией таблиц, так как это не устраняет корень проблемы несовместимости версий. Мы рекомендуем первым делом попробовать переход на сборку Postgres Pro. Если это невозможно, используйте метод с понижением режима совместимости конфигурации 1С. Данный подход позволяет восстановить стабильную работу системы и избежать перехода обратно на MS SQL.