MW211 EXIT

devlog
PostgreSQL/大量のINSERT
2018年05月22日
plain(平文)形式でバックアップしたところ、大量のINSERT文を取得してしまった。
これを別DBへ移行するため投入したいのだが。。。

やり方は以下の三つ。
┌─┬────────────────────────────────────┐
│①│インサート                                                              │
│  │「INSERT INTO "表"(列) VALUES (値);」を何回も実行する                   │
│  │数千件レベルまで                                                        │
├─┼────────────────────────────────────┤
│②│バルクインサート                                                        │
│  │「INSERT INTO "表"(列) VALUES (値),(値),…;」                           │
│  │数十万件レベルまで                                                      │
├─┼────────────────────────────────────┤
│③│コピー                                                                  │
│  │「COPY "表" FROM '入力.csv' WITH CSV;」                                 │
│  │数百万件レベルでもいける                                                │
└─┴────────────────────────────────────┘

①は取得したINSERT文をそのままコピペして実行するパターン。
最も簡単で、件数が少ないならこれがお勧め。

②はINSERT文を編集する必要あり。
前の行の末尾の「;」から次の行の「VALUES」までを「,」に置換してやればよい。
これもコピペでいける。
数十万件レベルならこれがお勧め。(①との差は歴然)

極端に件数が多いのであれば、INSERT文はあきらめる
③のパターン。
(というか、INSERTでデータ取得したこと自体がある意味おかしな感じになってしまう)
INSERT文の前後を上手に置換して、CSV形式にする。
その上で、COPY文で取り込む。
手続きがめんどくさいが、それだけの件数ということなので致し方なし。
分類:PostgreSQL