LoginSignup
3
0

More than 3 years have passed since last update.

Heroku ConnectのDBをローカルDBに復元

Last updated at Posted at 2019-01-30
  1. HerokuのPostgreをバックアップ & バックアップデータのURL取得
    1. heroku pg:backups capture --app <アプリ名> && heroku pg:backups public-url --app <アプリ名>
  2. バックアップデータのURLをブラウザに入力してバックアップデータをダウンロード (出力ファイル名は「herokudb.backup」とする)
    1. wgetで行う場合
      1. wgetをインストール (Chocolatelyを使っていればcinst -y wget)
      2. wgetでバックアップデータをダウンロード wget "<バックアップデータのURL>" -O herokudb.backup
  3. ローカルDBを準備 (ローカルDB名は「herokudb」、スキーマ名は「salesforce」とする)
    1. ローカルDBが存在していれば削除、ローカルDB作成
      1. psql --username postgres -c "DROP DATABASE IF EXISTS herokudb" && psql --username postgres -c "CREATE DATABASE herokudb"
    2. (初回のみ)ユーザ作成 ※バックアップデータの中にHeroku ConnectのHerokuのPostgreのユーザ名があるので一致させる
      1. psql --username postgres -c "CREATE ROLE <(HerokuのPostgreの)ユーザ名> WITH LOGIN PASSWORD '<パスワード>'"
  4. バックアップデータをローカルDBにリストア
    1. pg_restore --dbname=herokudb --username=postgres herokudb.backup
  5. 不要なテーブル・トリガー・Functionを削除
    1. (初回/テーブル増減時)後掲のdrop_objects.sqlファイルを作成/編集
    2. psql --dbname=herokudb --username postgres --file drop_objects.sql
drop_objects.sql
-- スキーマ名が「salesforce」の例
DROP TABLE salesforce._hcmeta;
DROP TABLE salesforce._sf_event_log;
DROP TABLE salesforce._trigger_log;
DROP TABLE salesforce._trigger_log_archive;

-- スキーマ名が「salesforce」の例、テーブル毎に追記
DROP TRIGGER hc_account_logtrigger ON salesforce.account;
DROP TRIGGER hc_account_status_trigger ON salesforce.account;
DROP TRIGGER hc_case_logtrigger ON salesforce.case;
DROP TRIGGER hc_case_status_trigger ON salesforce.case;
DROP TRIGGER hc_contact_logtrigger ON salesforce.contact;
DROP TRIGGER hc_contact_status_trigger ON salesforce.contact;
DROP TRIGGER hc_group_logtrigger ON salesforce.group;
DROP TRIGGER hc_group_status_trigger ON salesforce.group;
~以下略~

-- スキーマ名が「salesforce」の例、テーブル毎に追記
DROP FUNCTION salesforce.tlog_notify_trigger();
DROP FUNCTION salesforce.hc_capture_insert_from_row(hstore,varchar,_text);
DROP FUNCTION salesforce.hc_capture_update_from_row(hstore,varchar,_text);
DROP FUNCTION salesforce.hc_account_logger();
DROP FUNCTION salesforce.hc_account_status();
DROP FUNCTION salesforce.hc_case_logger();
DROP FUNCTION salesforce.hc_case_status();
DROP FUNCTION salesforce.hc_contact_logger();
DROP FUNCTION salesforce.hc_contact_status();
DROP FUNCTION salesforce.hc_group_logger();
DROP FUNCTION salesforce.hc_group_status();
~以下略~

<コピペ用>
heroku pg:backups capture --app <アプリ名> && heroku pg:backups public-url --app <アプリ名>
wget "" -O herokudb.backup
psql --username postgres -c "DROP DATABASE IF EXISTS herokudb" && psql --username postgres -c "CREATE DATABASE herokudb" && pg_restore --dbname=herokudb --username=postgres herokudb.backup && psql --dbname=herokudb --username postgres --file drop_objects.sql

<おまけ>
SLA(downtime) https://devcenter.heroku.com/articles/heroku-postgres-plans#plan-tiers

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0