常識なのかも知れないが、タイトルの通りである。 先日、拙作のGemのランキングサイトBestGems.orgの1億レコードほどあるデータベースをSQLite3からPostgreSQLへマイグレーションした。 この際に単にPostgreSQLのCOPY文を使うだけでは速度が遅すぎる問題が発生したため、このエントリを書く。 PostgreSQLに大量のデータを投入する方法については、PostgreSQLの公式ドキュメントが最も信頼のおける情報源だ。ちゃんと日本語訳されているので、これを読まないという選択肢はないだろう。ドキュメントによると、以下のアプローチがある。 自動コミットをオフにするCOPYの使用インデックスを削除する外部キー制約の削除maintenance_work_memを増やすcheckpoint_segmentsを増やすWALアーカイブ処理とストリーミングレプリケーションの無効化