はじめに
このドキュメントは、ローカルのDockerコンテナで開発しているPostgreSQLのデータを、Render上でホストされているPostgreSQLデータベースに同期(コピー)するための手順書です。
開発中にローカルで投入したテストデータをRender環境で確認したい、といったケースで役立ちます。手順自体はシンプルなので、一つずつ確認しながら進めていきましょう。
1. 事前準備
まず、作業を始める前に、Renderのダッシュボードから対象データベースの**接続URL(External URL)**をコピーして、いつでも使えるように準備しておいてください。
【重要】
このURLにはユーザー名やパスワードといった機密情報が含まれています。ファイルに保存する場合でも、そのファイルは .gitignore
に追加するなどして、絶対にGitリポジトリにコミットしないように徹底してください。
2. データ移行の手順
作業は大きく分けて「バックアップ」と「リストア」の2ステップです。
ステップ1: ローカルDBのバックアップ
最初に、ローカルのDockerコンテナ内で動いているデータベースの中身を、丸ごとSQLファイルとして書き出します。これを「ダンプを取る」と言います。
ターミナルで、プロジェクトのルートディレクトリで以下のコマンドを実行してください。
docker exec -t kidsplayground-postgres pg_dump -U kina -d kidsplayground_db -F p > backup.sql
【コマンドのポイント】
-
pg_dump
: PostgreSQLのデータベースの内容を書き出すための公式コマンドです。 -
-F p
: 出力形式をプレーンテキスト(plain
)に指定しています。中身がただのSQL文になるので、リストア時に汎用的なpsql
コマンドが使えてトラブルが少ないため、この形式がおすすめです。 -
> backup.sql
: 実行結果をbackup.sql
という名前のファイルに保存しています。
これで、カレントディレクトリに backup.sql
というバックアップファイルが作成されます。
ステップ2: Render DBへのリストア
次に、作成したバックアップファイルをRenderのデータベースに読み込ませます。これを「リストアする」と言います。
以下のコマンドを実行してください。
psql "<Renderの接続URL>" < backup.sql
【コマンドのポイント】
-
"<Renderの接続URL>"
: ここに、事前準備で用意したRenderの接続URLを貼り付けます。URLに特殊文字が含まれている可能性があるので、ダブルクォーテーション("
)で囲っておくと安全です。 -
< backup.sql
:backup.sql
ファイルの中身をpsql
コマンドの入力として流し込む、という意味です。
【よくあるエラーと対処法】
リストアを実行すると、ERROR: role "..." does not exist
というエラーが表示されることがあります。
これは、DBオブジェクトの所有者をローカル環境のユーザーに設定しようとして、「そんなユーザーはRenderにいませんよ」と怒られているだけです。データ自体は問題なくリストアされているので、このエラーは無視して大丈夫です。 よくあることなので焦らないでくださいね。
おわりに
以上でデータ同期は完了です。お疲れ様でした。
この手順をシェルスクリプトなどにまとめておくと、今後の作業が格段に楽になるので、慣れてきたら挑戦してみることをお勧めします。