Tihiroの頭を休めるIT教室

少しだけ頭使って後は根性

pg_restoreの-dとか-cとか-Cとかが難しい。

概要

pg_restoreの挙動に理解が追いつかないので、脳内アウトプット。ので、内容が不正確な可能性が大いにあります。

環境

PostgreSQL 10.5ぐらい

難しいの

-d オプション

リストア先のデータベースの名前を指定する。 つまりは、-d db_nameとした場合、db_nameにリストアする。 ただし、これは-Cオプションと併用しない場合の話。

-Cオプションと併用すると、db_nameに接続して、ダンプ内に書かれているデータベースをCREATEしてリストアする。

しかし、スキーマ単位のダンプをリストアしようとしたり、-nオプションと併用すると、やっぱりdb_nameにリストアしちゃう。

ちなみに、-dオプションをつけ忘れた場合は、標準出力にリストア(SQL表示)される。

わかりにくい。

-c オプション

このオプションをつけると、テーブルに対してDROP→CREATEしてからリストアする模様。 存在しないテーブルもダンプ内に含まれている場合はCREATEしてくれる。 ただし、リストア対象に関係ないものは当然削除しない。

-C オプション

リストア対象を作成してからリストアするというオプション。 リストア対象のデータベースとかスキーマとかをCREATEしてからリストアする模様。

-cオプションと併用するとデータベースとかスキーマとかをDROP→CREATEという動きになる?

んでも、よく(依存関係などがあると?)DROPに失敗する。その場合はデータのリストアも失敗する? 雰囲気的にはデータは追加されてもよいと思うけど、エラー時の挙動がよくわかんない。

リストア対象に関係ないものを削除したい(ダンプの状態にデータベースを戻したい)とか思って-cと-Cの両方をつけても上手く行かない場合が多い(経験上)。

まとめ

-cと-Cオプションを併用したときの挙動が理解できていない。ので、理解できていないうちは使用しないのが無難かも。