Ошибка не удалось открыть файл "pg_xact/02ED" - No such file or directory
В Интернет имеются различные статьи по этой проблеме. Я их прочитал. Попытался описанным в статье способом решить свою проблему. Ошибку устранить не удалось.
Источник 1: https://vk.com/wall-218118430_1412
Источник 2: https://forum.infostart.ru/forum16/topic309248
Ошибка проявлялась в двух вариантах. Варианты проявления ошибки:
Ошибка при попытке обновления конфигурации 1С:

Ошибка при попытке выгрузить конфигурацию в DT:
Ошибка СУБД:
58P01: ОШИБКА: не удалось получить состояние транзакции 785692563
DETAIL: Не удалось открыть файл "pg_xact/02ED": Нет такого файла или каталога.

Как я решил проблему?
В конкретном случае СУБД Postgres версии 13 функционирует на ОС "Astra Linux 1.7 x86-64"
Поскольку база 1С маленькая по размеру, а сервер производительный, и остальные файлы журнала транзакций имеют содержимое заполненное нулями я сделал вывод, что потерянный файл с большей долей вероятности также был заполнен «нулями». Все транзакции в этом файле имеют значение «0».
Для начала создаем пустой файл размером 256Кб в папке pg_xact нашей проблемной базы т имени пользователя postgres:
root@host# su postgres
Переходим в папку pg_xact:
postgres@host$ cd /путь_до_папки_установки_PostgreSQL/data/pg_xact;
Теперь создаем недостающий файл командой:
postgres@host$ dd if=/dev/zero of=02ED bs=256k count=1
После создания файла проблема не решилась. Выдавалась всё та же ошибка. Посмотрев на содержимое каталога pg_xact я обнаружил, что созданного мной файла 02ED нет. И сколько бы раз я не создавал файл — файл каждый раз удалялся ядром СУБД.
Не зная детального механизма (алгоритма) работы ядра СУБД и первопричины по которой ядро СУБД настойчиво удаляет конкретный файл журнала транзакции я решил обмануть ядро СУБД. Нам же требуется только прочитать файл 02ED при выгрузке конфигурации! Я установил права доступа для владельца «только чтение»
postgres@host$ chmod 444 02ED
Снова поместил файл в папку pg_xact. Но ядро СУБД снова его удалило. Пришлось подумать человеческим интеллектом и проявить смекалку.
Что я и сделал. Повествую дальше...
Переходим в папку pg_xact нашей базы.
Сначала создал пустой файл в папке pg_xact нашей базы с немного другим именем файла:
postgres@host$ dd if=/dev/zero of=02ED_2 bs=256k count=1
Затем написал маленький скрипт который бесконечное количество раз копирует файл 02ED_02 в 02ED.
Авторизовался в ОС пользователем postgres и перешел в папку pg_xact нашей базы.
Затем запустил скрипт:
postgres@host$ while true; do cp 02ED_copy 02ED; sleep 0.01; done
Тем самым мы постоянно «подпихиваем» файл 02ED ядру СУБД. Снова зашел в конфигуратор 1С и запустил выгрузку базы в DT. Ошибок не возникло и база выгрузилась успешно.
Остановил выполнение скрипта копирования файла и снова решил выгрузить базу 1С в DT. С удивлением обнаружил, что выгрузка уже прошла без ошибок.
Наверное профессионалы скажут так нельзя, но результат то положительный! Ошибка преодолена.