はじめに
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を以下のように記述します。
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を記述してください。
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 から取得できます。

コマンドのオプションについては、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 をクリックします。

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

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

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