hello foo bar Saba note | Cloud SQLのPostgreSQLでリストアできない

Cloud SQLのPostgreSQLでリストアできない

2019.11.11 (月)

Cloud SQLでPostgreSQLを立てた際に、外部からダンプしたデータがリストアできないっていうのがあるので、そのまとめです。ドキュメント読んだらきちんと書いてあった。
何も考えずにダンプデータをリストアすると、

[543004]: [1-1] db=postgres,user=cloudsqlsuperuser ERROR: must be member of role "ROLE_NAME"

というエラーでリストアできません。なのでCloud SQLの仕様に合わせてダンプしないとダメです。(ちなみにCloud Shellから権限関連をいろいろこねくりまわしてみたけどダメでした。)
以下の仕様に従ってダンプします。

  • --no-owner
    SQL ダンプファイルに所有権の変更コマンドを含めることはできません。
  • --format=plain
    Cloud SQL でサポートされているのはプレーン SQL 形式のみです。
  • --no-acl
    このフラグは、SUPERUSER ロールのメンバーシップを付与または取り消すステートメントがダンプに含まれている場合に必要です。

こういうのでダンプしておく。(ドキュメントにもあるやつ)

$ pg_dump -U [USERNAME] --format=plain --no-owner --no-acl [DATABASE_NAME] | sed -E 's/(DROP|CREATE|COMMENT ON) EXTENSION/-- \1 EXTENSION/g' > [SQL_FILE].sql

Cloud SQLで吸い込めないものは削ぎ落としている形になるので、これでいける。