Ускорили загрузку с 17 до 2 минут: как NDJSON-стриминг подружил Postgres и Supabase Edge
17 минут на загрузку данных? Это не работа, а чаепитие. Сокращаем до 2 минут с помощью стриминга и здравого смысла.

Разработчики, которые загружают большие объёмы данных в Postgres, знают: иногда процесс напоминает загрузку Windows 95 — хочется пойти выпить кофе, потом ещё один, потом лечь спать. Один из таких кейсов (17 минут на bulk upload) превратили в 2 минуты, и делимся рецептом.
Магия в деталях: NDJSON + стриминг
Исходная проблема: классическая вставка пачками через INSERT — это как пытаться залить бассейн через трубочку. Решение оказалось изящным: использовать NDJSON (каждая строка — JSON-объект) и стримить прямо в Postgres через Supabase Edge Functions. Никаких промежуточных файлов, никакого ожидания.
Что конкретно сделали:
- Заменили batch-insert на стриминг через NDJSON.
- Использовали
pg-copy-streamsдля прямого копирования в таблицу. - Параллелили загрузку по чанкам (да, многопоточность не только для майнинга).
Результат: 17 минут → 2 минуты. И никаких волшебных палочек, только грамотная работа с протоколом.
Комментарий студии METABYTE:
Если ваш bulk upload всё ещё длится дольше, чем утренний стендап, возможно, пора пересмотреть архитектуру. Мы помогаем проектам не просто ускоряться, а делать это без костылей и с сохранением нервных клеток.
СЛЕДУЮЩИЙ ШАГ
Понравилось как мыслим?
Применяем те же принципы в клиентских проектах: AI, автоматизации, продукты, которые не умирают после релиза.