Из 1С через dt выгрузка базы происходит нормально, а при создании дампа средствами pg_dump ошибка invalid memory alloc request size.

Параметр pg_dump --format (-F) значения не имеет, проявляется на всех.

Пример вывода ошибки:

pg_dump: Ошибка выгрузки таблицы "config": сбой в PQgetResult().
pg_dump: Сообщение об ошибке с сервера: ОШИБКА: invalid memory alloc request size ХХХХХХХ
pg_dump: Выполнялась команда: COPY public.config (filename, creation, modified, attributes, datasize, binarydata) TO stdout;
BASH


Проблема в том, что 1С активно использует поля типа bytea и в некоторых случаях размер такого поля может превысить 1ГБ, что является пределом для PostgreSQL https://www.postgresql.org/docs/current/limits.html

Часто эта проблема наблюдается на таблице public.config, в которой 1С хранит свою конфигурацию.

При попытке выгрузить такую таблицу с помощью pg_dump возникает ошибка 


invalid memory alloc request size ХХХХХХХХ.
BASH


Кроме того, при попытке восстановления такой частичной резервной копии, созданной в форматах directory или custom появляются подобные ошибки:

pg_restore: обрабатываются данные таблицы "public.config"
pg_restore: [внешний архиватор] не удалось прочитать входной файл: конец файла
pg_restore: [directory archiver] could not close data file: Success
pg_restore: [parallel archiver] a worker process died unexpectedly
pg_restore: ошибка: не удалось закрыть файл данных "/backup/dump/47351.dat": Победа
pg_restore: ошибка: рабочий процесс неожиданно завершился
BASH




Возможные варианты решений:

1 . Исключить сохранение данных таблицы(ключ --exclude-table-data=tablename) из резервной копии и сохранять/восстанавливать таблицу через COPY. Например:

$ pg_dump mydb -Fd -f /backup/mybackup1/ --exclude-table-data=public.config
$ psql mydb -c "COPY (SELECT * FROM public.config) TO '/backup/mybackup1/public.config.dat' BINARY"
BASH



В этом случае в РК от таблицы public.config будет сохранена только схема, а данные будут отдельно выгружены в файл /backup/mybackup1/public.config.dat.

Восстановление такой РК:

$ pg_restore -d mydb -Fd /backup/mybackup1/
$ psql mydb -c "COPY public.config FROM '/backup/mybackup1/public.config.dat' BINARY"
BASH

 


2 . Чистить конфигурацию от мусора (если проблема в таблице public.config) или исследовать проблемную строку. Пример поиска проблемной строки в таблице:

select ctid, length(long_field_name)
from problematic_table
where length(long_field_name) >= 1024*1024*256
order by 2 desc;
SQL


3 . В версиях Tantor SE16 и выше появлися параметр enable_large_allocations и его поддержка в утилитах pg_dump/pg_restore. 
Этот параметр позволяет выделять в определённых случаях до 2Г памяти для преобразования значений, что позволяет выгружать в дамп значения большего размера.

Более подробно ознакомиться можно здесь:
https://docs.tantorlabs.ru/tdb/ru/16_4/se/runtime-config-resource.html#GUC-ENABLE-LARGE-ALLOCATIONS