7
3

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からNeonに簡単に移行できた件について【Rails初学者】

Last updated at Posted at 2025-09-17

はじめに

2025年4月からRUNTEQで学習しているNomukuuunと申します。

アウトプットを兼ねて作成していたアプリをRenderにデプロイしていたのですが、この度DBをRenderからNeonに移行しました。
その時のやり方について、備忘録を兼ねて残したいと思います。

同じようにRenderからNeonにDBを移行しようと考えている方の参考になれば幸いです。
また、初学者が記述していますので、誤り等がございましたらコメントにてご指摘をお願いいたします。

この記事の対象者

Renderにアプリをデプロイしていて、DBをNeonへ移行することに焦点を当てています。
以下の点についてはこの記事では説明しませんので、ページ最下段の参考記事など他の方の分かりやすい記事をご覧ください。

  • Renderとは?
  • Neonとは?
  • Renderへのデプロイ方法
  • NeonのDB作成方法

事前準備

私の行った方法ではローカル環境でPostgreSQLのクライアントツールを使っています。
同じ方法を試される場合は、インストールが必要になりますので、ご注意ください。

config/database.ymlの書き換え

config/database.ymlのproductionを以下のように記述します。

config/database.yml
production:
  <<: *default
  url: <%= ENV['DATABASE_URL'] %>

本番環境の環境変数には DATABASE_URL にNeonの接続用URLを記述します。

githubへのcommitも忘れずに行ってください。
 
 
【追記:9/17 15時】
DATABASE_URL の環境変数は、Railsにおいて優先的にマージされて使用されるようです。
以下、database.ymlのコメントアウト部を参考に転記します。

# If the connection URL is provided in the special DATABASE_URL environment
# variable, Rails will automatically merge its configuration values on top of
# the values provided in this file. Alternatively, you can specify a connection
# URL environment variable explicitly:
#
# production:
# url: <%= ENV["MY_APP_DATABASE_URL"] %>

ローカル環境においてもNeonのDBを使いたい場合などは .env などのファイルにDATABASE_URLを追記し、Neonの外部接続用URLを記述してください。

.env
DATABASE_URL='Neonの外部接続用URL'

逆に上記のコードを .env に追加するとローカルのDBが使われず、config/database.ymlのdevelopmentに url: <%= ENV['DATABASE_URL'] %> を記述していなくてもNeonのDBにつながってしまうことがあります。

ローカル環境でRenderDBのバックアップ

RenderDB上のデータを移行するためにバックアップデータを取ります。
ターミナルで以下のコマンドを実行します。

pg_dump --no-owner --format=custom --file=backup.dump "Renderの外部接続用URL"

注意
ダブルクォーテーション内にRenderの外部接続用URLを貼ります

RenderDBの外部接続用URLは Connections から取得できます。
Image from Gyazo

 
コマンドのオプションについては、DBでユーザー権限の指定(ユーザーごとにデータ操作権限を付与する設定)や拡張機能(ランダムID生成ができる機能など)を使っている場合は上記のとおりではうまくいかないかもしれません。
私の場合はDB側でなくアプリ側で暗号化などを行い、そのデータをDBに保存するだけの構成になっていたため、これらのオプションをつけています。

  • --no-owner
    テーブルやスキーマの所有者情報を含めない。
  • --format=custom
    カスタムフォーマットの指定。
  • --file=backup.dump
    バックアップファイル名の指定。

また、私はコマンド実行時に付けませんでしたが、以下のオプションもつけておけば、Neonへバックアップを取り込むときにエラーが起こらなかったのかもしれません。(エラーは出てもデータはちゃんと取り込めていましたが…)

  • --no-acl
    権限情報を含めない。

NeonでDBを作成 / 接続用URLの取得

こちらについては参考記事をご覧ください。
作成したDBの connection string にある以下と同様の文字列から「この部分をコピー」にある内容を全てコピーしてください。

psql 'この部分をコピー'

Neonへバックアップファイルのインポート

ターミナルで以下のコマンドを実行します。

pg_restore --no-owner --dbname="Neonの外部接続用URL" backup.dump

ダブルクォーテーション内はNeonの外部接続用URLに貼り替えてください

私の場合は、ここで「renderDB名を権限に持つクエリは存在しない」といったエラーが出ましたが、ちゃんと取り込めていました。

Renderのwebサーバーの環境変数を変更

ダッシュボード > Environment > Environment Variables にあるキー「DATABASE_URL」の値をNeonの外部接続用URLに変更する。

NeonはDB接続にsslモードでアクセスするため、?sslmode=requireがついているか確認してください

参考:NeonからRenderDBのデータを直接インポートする

私は手動でバックアップをインポートする方法をとったため試してはいませんが、Neonから直接RenderDBのデータをインポートすることもできそうでした。

Neonのダッシュボードにある Import your data をクリックします。
Image from Gyazo

表示された Import Data の入力欄にRenderの外部接続用URLを貼付して Run Checks を押します。
Image from Gyazo

Check compatibility となれば Start Import からデータを取り込めそうでした。
Image from Gyazo

おわりに

Renderへのデプロイについては他の方の記事などを参考に、見よう見まねでやっていたこともあり無料インスタンスを使っていました。
無料インスタンスの有効期限が切れる直前で課金するか悩んでいたのですが、簡単にNeonへ移行することができてよかったです。

参考記事

  • 移行関係

  • Render、NeonでのDB作成方法など

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?