Да, вы не можете просто записать файлы любым разумным способом.В дополнение к формату страницы данных вам необходимо будет реплицировать журналы фиксации, часть журналов упреждающей записи, некоторые части видимости транзакций, любой код преобразования для используемых вами типов и, возможно, код TOAST и код varlena.Да, и данные системного каталога, как уже упоминалось.Грубое предположение, вы можете обойтись только с заимствованием 200К строк кода с сервера.PostgreSQL с самого начала построен на расширяемости;Вы даже не можете интерпретировать, что означает целое число, не посмотрев сначала информацию о типе вокруг целочисленного типа в системном каталоге.
Есть несколько советов по ускорению процесса COPY при Массовая загрузка и восстановление.В частности, может помочь отключение synchronous_commit.Еще один полезный трюк: если вы начинаете транзакцию, TRUNCATE таблицы, а затем копируете в нее, то COPY идет намного быстрее.Это не беспокоит обычная защита журнала записи.Однако легко обнаружить, что COPY на самом деле является узким местом в производительности процессора, и с этим ничего не поделаешь.Некоторые люди разбивают входящий файл на части и запускают сразу несколько операций COPY, чтобы обойти это.
Реально, pg_bulkload, вероятно, является вашей лучшей ставкой, если только он не получает привязку к процессору - в этот момент сплиттер выходит за пределыбаза данных и множественная параллельная загрузка - это действительно то, что вам нужно.