pg_dumpの-Fcオプションとは
pg_dumpはデフォルトでSQL文からなるプレインテキスト形式のダンプを出力する。-Fc(--format=custom)オプションを指定すると、PostgreSQL独自のバイナリ形式であるカスタムフォーマットでダンプを出力できる。
$ pg_dump -U postgres -Fc mydb -f dump.custom
出力されたファイルの先頭を確認すると、PGDMPというマジックナンバーで始まるバイナリファイルであることが分かる。
$ head -c 16 dump.custom | xxd
00000000: 5047 444d 5001 0f00 0408 0101 000b 0000 PGDMP...........
プレインテキスト形式のようにテキストエディタで直接編集はできないが、代わりにダンプデータがデフォルトで圧縮されるという利点がある。
プレインテキスト形式との違い
同じデータベースをプレインテキスト形式とカスタムフォーマットでそれぞれダンプし、リストア方法の違いを確認する。
$ pg_dump -U postgres mydb -f dump.sql
$ pg_dump -U postgres -Fc mydb -f dump.custom
プレインテキスト形式はpsqlでSQL文をそのまま実行してリストアする。
$ psql -U postgres -d restoredb -f dump.sql
カスタムフォーマットはpg_restoreコマンドを使う。
$ pg_restore -U postgres -d restoredb dump.custom
pg_restore -lでダンプ内容を確認する
カスタムフォーマットのダンプは、リストアを実行する前にpg_restore -lでTable of Contents(TOC)を確認できる。
$ pg_restore -l dump.custom
;
; Archive created at 2026-07-24 23:40:11 UTC
; dbname: postgres
; TOC Entries: 11
; Compression: gzip
; Format: CUSTOM
;
; Selected TOC Entries:
;
216; 1259 16391 TABLE public categories postgres
215; 1259 16384 TABLE public items postgres
3418; 0 16391 TABLE DATA public categories postgres
3417; 0 16384 TABLE DATA public items postgres
3273; 2606 16397 CONSTRAINT public categories categories_pkey postgres
3271; 2606 16390 CONSTRAINT public items items_pkey postgres
テーブルやその主キー制約が個別のTOCエントリとして記録されており、どの対象がダンプに含まれているかを事前に確認できる。
圧縮アルゴリズムはgzipだけではない
pg_restore -lの出力にあるCompression: gzipは、ダンプ内の各データが圧縮されているアルゴリズムを示している。ただし、ダンプファイル自体はgzip形式ではなく、PGDMPのマジックナンバーを持つPostgreSQL独自のアーカイブ形式であり、gunzipコマンドでそのまま展開はできない。
圧縮アルゴリズムは-Z(--compress)オプションで変更できる。デフォルトのgzipのほか、lz4やzstdも指定できる。
$ pg_dump -U postgres -Fc -Z zstd mydb -f dump.custom
$ pg_restore -l dump.custom | grep Compression
; Compression: zstd
lz4やzstdはgzipより高速に圧縮・展開できるため、ダンプ・リストアの時間を短縮したい場合に有効である。ただしlz4やzstdを使うには、pg_dumpをビルドしたPostgreSQLがそれぞれのライブラリをサポートしている必要がある。
まとめ
pg_dumpの-Fcオプションは、圧縮されたバイナリ形式でダンプを取得できるオプションである。プレインテキスト形式と比べてファイルサイズを抑えられるほか、pg_restore -lでのダンプ内容の事前確認や-Zによる圧縮アルゴリズムの変更が可能になる。バックアップ用途でpg_dumpを使う場合は、-Fcオプションを検討するとよい。
