COPY and set-based SQL, never an ORM under ingestion
The predecessor imported the register row at a time inside per-row savepoints: 2.15 million rows at roughly 55 rows a second, which is 10.5 hours. The same file now lands in 15.8 seconds because bulk work goes through COPY and set-based SQL. That single choice is the difference between a register somebody reloads when the vendor ships an update and one nobody dares touch.