0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ローカルDBからRenderへデータを同期する手順

Posted at

はじめに

このドキュメントは、ローカルの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にいませんよ」と怒られているだけです。データ自体は問題なくリストアされているので、このエラーは無視して大丈夫です。 よくあることなので焦らないでくださいね。


おわりに

以上でデータ同期は完了です。お疲れ様でした。

この手順をシェルスクリプトなどにまとめておくと、今後の作業が格段に楽になるので、慣れてきたら挑戦してみることをお勧めします。

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?