Data and databases · Edition No. 57 · 21 Oct 2026

dimitri/pgloader

Loads data into PostgreSQL from other databases and from files, keeping going when individual rows fail.

← Data and databasesRead the whole edition →
pgloader: one command to load a database. Copies data in and keeps going past bad rows.

6.5k stars · PostgreSQL Licence · v3.6.9 (2022-10-24) · Track this in Scout

Loads data into PostgreSQL from other databases and from files, keeping going when individual rows fail.

▶Repo detailsthe review · specs · pros & cons · install

What it does

You write a short .load file saying where the data comes from and where it should go, then run one command. It loads through PostgreSQL's fast COPY path rather than row by row. Its central behaviour is transaction handling: PostgreSQL normally wraps a load in one transaction, so a single bad line throws away the whole table, and pgloader instead writes rejected rows to their own file and continues. It also reshapes values as it goes, and the README gives the clearest example of why that matters: MySQL allows a date of all zeros, which PostgreSQL will not accept, so pgloader turns it into an empty value. It reads SQLite, MySQL and SQL Server, and the repository also lists CSV, dBase and IBM IXF. Version 4 is a rewrite in Clojure and the project calls it a drop-in replacement for version 3, using the same .load syntax and the same flags. It is a loader, not a continuous link: it copies data once when you run it, and it does not keep two databases in step afterwards.

Why it matters

Who it suits. Anyone with records in one database who wants them in PostgreSQL, once. It suits a migration with messy data most of all, because the rejected-rows file turns an all-or-nothing failure into a short list of things to look at. It also suits repeated bulk loads from CSV, since a .load file is reusable and readable. Skip it if you need changes to flow continuously from one database to another, which is a different job and a different tool.

Verdict. Still the straightest route into PostgreSQL, and worth an afternoon on a copy of the data before you touch anything real. Be careful about which version you take. The newest tagged stable release is v3.6.9 from 24 October 2025, about twelve months old, while code was pushed on 14 September 2026, so the project is alive and the tag is simply behind. Version 4 is the active line, it needs Java 21 or newer, and the download is a pre-release build from the v4-clojure-rewrite branch. There is no version 4 Debian package yet, so apt-get install pgloader still gives you version 3. For an Oracle source this is the wrong tool and darold/ora2pg is the right one; Edition 48 covered it.

Stars6.5k
LicencePostgreSQL Licence
Latestv3.6.9 (2022-10-24)
Good
  • One command and one short file turn another database into a PostgreSQL one.
  • Bad rows go to a file instead of killing the whole load.
  • The PostgreSQL Licence, which is about as permissive as licences get.
Watch for
  • Two live versions with different requirements, and the stable tag is a year old while the active work sits on a branch.
  • Version 4 needs Java 21 or newer, which is a real install on a small machine.
  • The package managers still ship version 3, so the documented v4 route means downloading a file by hand.
Similar repositories
  • dimitri/pgcopydb

    By the same author, for PostgreSQL to PostgreSQL only; it copies a whole database in parallel and is faster for that one case, under the PostgreSQL Licence.

    Track this in Scout
  • darold/ora2pg

    Oracle to PostgreSQL, GPL-3.0, and it also prints an estimate of how many person-days the migration would take; covered in Edition 48.

    Track this in Scout
  • debezium/debezium

    The continuous version of this idea: Apache-2.0, it watches a database for changes and streams them out, rather than copying once.

    Track this in Scout
Install
# version 3, from the Debian or Ubuntu archive
sudo apt-get install pgloader
# version 4: download pgloader.jar from the v4-dev release,
# then check it runs (needs Java 21 or newer)
java -jar pgloader.jar --version
# or use the container image
docker pull ghcr.io/dimitri/pgloader:latest
Screenshots
dimitri/pgloader: GitHub preview card

On Stack Radar: Data & Research › Data Enrichment & Collection › Data Connectors.

Get the next edition in your inbox

A dozen repositories, opened and checked. The licence read, the last release dated, and the ones that did not make it named with the reason. It is the half most lists leave out.

No tracking pixels. One click to leave. The archive stays free either way.

We use your address to send the edition and nothing else. Confirm by email, leave in one click. How we handle it.