Short answer: use the custom format (-F c) for backups. It's compressed, it restores selectively and in parallel, and any recent pg_restore reads it. Use plain SQL when a human (or a diff) needs to read the output.
The four formats
Custom -F c | Plain SQL (default) | Directory -F d | Tar -F t | |
|---|---|---|---|---|
| Output | One binary file | One .sql text file | A folder of files | One .tar file |
| Compressed | Yes, by default | No (unless -Z) | Yes, per table | No |
| Restore with | pg_restore | psql | pg_restore | pg_restore |
| Restore one table | Yes | Only by editing the file | Yes | Yes |
Parallel restore (-j) | Yes | No | Yes | No |
Parallel dump (-j) | No | No | Yes | No |
| Readable in a text editor | No | Yes | No | No |
Why custom format is the default choice for backups
- Smaller. Compression typically shrinks text-heavy data several times over.
- Selective restores.
pg_restore -t orderspulls one table out of a full backup;pg_restore -llists what's inside. - Faster restores.
pg_restore -j 4rebuilds tables and indexes in parallel. - Order handled for you. pg_restore sorts out dependencies, so you can skip or reorder parts.
The trade-off is that you need pg_restore (part of the standard client tools) to read it, and it must be at least as new as the pg_dump that wrote the file.
When plain SQL is the better fit
- You want to read or diff the backup, or keep schema in version control (
pg_dump --schema-onlyas plain SQL is great for that). - You need to edit before restoring: rename a schema, strip an extension.
- You're moving data to something that only speaks SQL.
Plain dumps restore with psql -f backup.sql. They can't restore in parallel, and getting one table out means editing the file.
When to reach for the directory format
For databases in the tens of gigabytes and up, the directory format is the only one that dumps in parallel:
pg_dump -h db.example.com -U app -F d -j 4 -f D:\Backups\shop_20261014 shopIt writes a folder rather than a file, which is a little more awkward to copy around. Zip it, or copy the whole folder.
Compression level
Custom and directory formats compress with gzip level 6 by default. -Z 1 is noticeably faster for a slightly larger file. That's a good trade for nightly backups, where speed matters more than a few percent of disk. pg_dump 16 and later can also use lz4 or zstd (--compress=zstd), which are faster still. Every pg_restore that can read the archive version handles them.
What PostgresBackup uses
PostgresBackup writes custom-format dumps (pg_dump -Fc) with fast compression (-Z 1): about half the dump time of the default, for files around 7% larger. Any pg_restore of the same or newer version can read them, so you're never locked in. Clones accept extra pg_dump and pg_restore options if you need something different, and restores handle plain .sql files with psql.