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