Skip Navigation
Show nav
Heroku Dev Center Dev Center
  • Get Started
  • ドキュメント
  • Changelog
  • Search
Heroku Dev Center Dev Center
  • Get Started
    • Node.js
    • Ruby on Rails
    • Ruby
    • Python
    • Java
    • PHP
    • Go
    • Scala
    • Clojure
    • .NET
  • ドキュメント
  • Changelog
  • More
    Additional Resources
    • Home
    • Elements
    • Products
    • Pricing
    • Careers
    • Help
    • Status
    • Events
    • Podcasts
    • Compliance Center
    Heroku Blog

    Heroku Blog

    Find out what's new with Heroku on our blog.

    Visit Blog
  • Log in or Sign up
View categories

Categories

  • Heroku のアーキテクチャ
    • コンピューティング (dyno)
      • dyno の管理
      • dyno の概念
      • dyno の動作
      • dyno の参照資料
      • dyno のトラブルシューティング
    • スタック (オペレーティングシステムイメージ)
    • ネットワーキングと DNS
    • プラットフォームポリシー
    • プラットフォームの原則
    • buildpack
  • 開発者ツール
    • AI の操作
    • コマンドライン
    • Heroku の VS Code 拡張機能
  • デプロイ
    • Git を使用したデプロイ
    • Docker によるデプロイ
    • デプロイ統合
  • 継続的デリバリーとインテグレーション (Heroku Flow)
    • 継続的統合
  • 言語サポート
    • Node.js
      • Node.js アプリのトラブルシューティング
      • Node.js の操作
      • Heroku での Node.js の動作
    • Ruby
      • Rails のサポート
        • Rails の操作
      • Bundler の使用
      • Ruby の操作
      • Heroku での Ruby の動作
      • Ruby アプリのトラブルシューティング
    • Python
      • Python の操作
      • Python でのバックグラウンドジョブ
      • Heroku での Python の動作
      • Django の使用
    • Java
      • Heroku での Java の動作
      • Java の操作
      • Maven の使用
      • Spring Boot の使用
      • Java アプリのトラブルシューティング
    • PHP
      • Heroku での PHP の動作
      • PHP の操作
    • Go
      • Go の依存関係管理
    • Scala
    • Clojure
    • .NET
      • .NET の操作
  • データベースとデータ管理
    • Heroku Postgres
      • Postgres の基礎
      • Postgres スターターガイド
      • Postgres のパフォーマンス
      • Postgres のデータ転送と保持
      • Postgres の可用性
      • Postgres の特別なトピック
      • Heroku Postgres への移行
    • Heroku Key-Value Store
    • Apache Kafka on Heroku
    • その他のデータストア
  • AI
    • Inference の基礎知識
    • Inference API
    • Heroku Inference のクイックスタートガイド
    • AI モデル
    • ツールの使用
    • AI 連携
    • ベクトルデータベース
  • モニタリングとメトリクス
    • ログ記録
  • アプリのパフォーマンス
  • アドオン
    • すべてのアドオン
  • 共同作業
  • セキュリティ
    • アプリのセキュリティ
    • ID と認証
      • シングルサインオン (SSO)
    • Private Space
      • インフラストラクチャネットワーキング
    • コンプライアンス
  • Heroku Enterprise
    • Enterprise Accounts
    • Enterprise Team
  • パターンとベストプラクティス
  • Heroku の拡張
    • Platform API
    • アプリの Webhook
    • Heroku Labs
    • アドオンのビルド
      • アドオン開発のタスク
      • アドオン API
      • アドオンのガイドラインと要件
    • CLI プラグインのビルド
    • 開発ビルドパック
    • Dev Center
  • アカウントと請求
  • トラブルシューティングとサポート
  • Salesforce とのインテグレーション
    • Heroku AppLink
      • Heroku AppLink リファレンス
      • Heroku AppLink の使用
      • Heroku AppLink スターターガイド
    • Heroku Connect (Salesforce 同期)
      • Heroku Connect の管理
      • Heroku Connect のリファレンス
      • Heroku Connect のトラブルシューティング
    • その他の Salesforce 統合
  • データベースとデータ管理
  • Heroku Postgres
  • Heroku Postgres への移行
  • Google Cloud SQL から Heroku Postgres への移行

Google Cloud SQL から Heroku Postgres への移行

日本語 — Switch to English

Table of Contents [expand]

  • データベースのサイズを取得する
  • データベースダンプを準備する
  • 復元移行を実行する
  • 移行が完了したことをテストで検証する
  • 既存のアプリケーションとサービスを接続する
  • まとめ

最終更新日 2025年03月28日(金)

このガイドでは、Postgres データベースを Google Cloud SQL​ から Heroku Postgres​ に移行するプロセスについて説明します。このガイドでは、Google Cloud Storage​ を使用してデータベースダンプファイルを保存します。移行を開始する前に、「Heroku Postgres への移行の準備​」のステップを完了していることを確認してください。

データベースのサイズを取得する

ほとんどの場合、データベースのサイズが 100 GB 未満であれば、ダンプと復元の移行戦略が適しています​。Google Cloud SQL データベースには、データベースのサイズを判断する方法がいくつかあります。Google Cloud SQL ダッシュボードからデータベースを選択すると、Overview (概要) ページの上部にメトリクスのビジュアル化が表示されます。ストレージを表示するには、Storage usage (ストレージ使用量) チャートを選択します。

Google のストレージ使用量

この例では、ストレージ使用量は 0.36 GB、つまり約 390 MB です。ただし、この数値には、システムファイル、インストールなど、管理されたインスタンスで実行しているシステムのすべてのストレージが含まれます。そのため、実際のデータベースサイズはこの数値のほんの一部にすぎません。

より正確なサイズを読み取るには、データベースインスタンスに接続して list databases \l+​ コマンドを使用します。Overview (概要) ページには、Google Cloud SQL インスタンスに接続するための Public IP address (パブリック IP アドレス) が表示されます。

Google でインスタンスを接続する

psql​ クライアントを使用するための接続文字列には、次の形式を使用します。

postgres://DB_USERNAME:DB_PASSWORD@DB_HOST:DB_PORT/DB_NAME

Google Cloud SQL PostgreSQL データベースの場合、DB_USERNAME​ は postgres​、DB_HOST​ はパブリック IP アドレスです。

サンプルデータベースの名前は coffeeshopdb​ であるため、以下のコマンドでデータベースを psql​ クライアントに接続します。

$ psql postgresql://postgres:mypassword@35.222.61.199:5432/coffeeshopdb

接続すると、list databases \l+​ コマンドでデータベースのサイズを表示できます。

$ psql=> \l+

                        List of databases
    Name        | Owner    | Encoding |   Collate   | Size   |
----------------+----------+----------+-------------+--------+
 coffeeshopdb   | postgres | UTF8     | en_US.UTF-8 | 251 MB |

Size​ 列はデータベースのサイズが 251 MB であることを示しています。

データベースのサイズに適した Heroku Postgres プランを確認するには、「適切な Heroku Postgres プランの選択​」を参照してください。

データベースダンプを準備する

開始する前に、システムを読み取り専用モードに設定するか、連動するすべてのサービスをオフラインにして、エンドユーザーに現在のメンテナンスステータスを通知します。

データベースが Heroku アプリにアタッチされている場合は、アプリをメンテナンスモード​にします。

データをバックアップする

データベースの Backups (バックアップ) ページに移動して Create Backup (バックアップを作成) をクリックし、 Google でデータベースをバックアップします​。

Google でバックアップを作成する

データベースをローカルファイルにダンプする

pg_dump​ を使用して、Google Cloud SQL データベースをローカルファイルにダンプします。

$ pg_dump postgres://DB_USERNAME:DB_PASSWORD@DB_HOST:DB_PORT/DB_NAME \
    -Fc -b -v \
    -f /tmp/data-for-migration.sql

このコマンドの実行にかかる時間は、データベースのサイズによって異なります。/tmp/data-for-migration.sql​ のファイルサイズを監視し、長いプロセスが実行中であることを確認します。

ファイルを Google Cloud Object Storage にアップロードする

Heroku では、URL でアクセスできるファイルから Postgres データベースを復元できます。この Google Cloud SQL からの移行では、データバックアップファイルを Google Cloud Storage にアップロードし、そのファイルの署名付き URL を取得できます。

まず、バケットを作成します​。この例では、バケットに postgres-for-migration​ という名前を付けました。

Google でバケットを作成する

セキュリティ保護のため、必ず公開アクセスを防止するようにバケットのアクセスポリシーを設定してください。

Google で公開アクセスを防止する

さらに、バケットが適切な暗号化を使用していることを確認してください。

Google での暗号化

Google Cloud Storage でバケットを作成したら、「データベースをローカルファイルにダンプする」のステップ​の /tmp/data-for-migration.sql​ ファイルをアップロードします。

Google でファイルをアップロードする

復元移行を実行する

Heroku アプリを作成する

Heroku CLI​ を使用して Heroku アカウントにログインします。

$ heroku login

次に、Heroku アプリを作成し、postgres-migration-from-google​ のように名前を付けます。

$ heroku apps:create postgres-migration-from-google
Creating ⬢ postgres-migration-from-google... done

Heroku Postgres アドオンを作成する

Heroku アプリを作成したら、適切なプラン​で Heroku Postgres アドオンを追加します。「データベースのサイズを取得する​」で取得したデータベース情報に基づいて、Essential-1 Postgres プランを使用します。

$ heroku addons:create \
    --app psql-migration-from-google \
    heroku-postgresql:essential-1
Creating heroku-postgresql:essential-1 on ⬢ psql-migration-from-google... ~$0.013/hour (max $9/month)
Database should be available soon
postgresql-elliptical-46201 is being created in the background. The app will restart when complete...
Use heroku addons:info postgresql-elliptical-46201 to check creation progress
Use heroku addons:docs heroku-postgresql to view documentation

Heroku は、Heroku アプリ向けに Postgres データベースのプロビジョニングを開始し、一意の名前を指定します。数分以内にデータベース名を指定して以下のコマンドを実行し、作成したデータベースを確認できます。

$ heroku addons:info postgresql-elliptical-46201
=== postgresql-elliptical-46201

Attachments:  psql-migration-from-google::DATABASE
Installed at: Mon Sep 30 2024 05:15:00 GMT-0700 (Mountain Standard Time)
Max Price:    $9/month
Owning app:   psql-migration-from-google
Plan:         heroku-postgresql:essential-1
Price:        ~$0.013/hour
State:        created

Heroku Postgres に必要な拡張機能をインストールする

データを移行する前に、Google Cloud SQL インスタンスで使用していた拡張機能​をインストールします。

まず、Heroku Postgres インスタンスにすでにインストールされている拡張機能を確認するため、pg:psql​ を使用して Heroku Postgres インスタンスに接続します。

$ heroku pg:psql --app psql-migration-from-google
--> Connecting to postgresql-elliptical-46201
psql (16.4 (Ubuntu 16.4-1.pgdg20.04+1), server 16.2)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

psql=> \dx
                     List of installed extensions
        Name        | Version |   Schema   |          Description
--------------------+---------+------------+-------------------------------
 pg_stat_statements | 1.10    | public     | track planning and executio...
 plpgsql            | 1.0     | pg_catalog | PL/pgSQL procedural language
(2 rows)

Google Cloud で使用していた拡張機能のうち、Heroku Postgres にまだインストールされていないものがあればインストールします。この例では、tablefunc​ および uuid-ossp​ の拡張機能です。

$ psql=> CREATE EXTENSION IF NOT EXISTS tablefunc;
CREATE EXTENSION
psql=> CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION

psql=> \dx
                     List of installed extensions
        Name        | Version |   Schema   |          Description
--------------------+---------+------------+-------------------------------
 pg_stat_statements | 1.10    | public     | track planning and execution…
 plpgsql            | 1.0     | pg_catalog | PL/pgSQL procedural language
 tablefunc          | 1.0     | public     | functions that manipulate…
 uuid-ossp          | 1.1     | public     | generate universally unique…

(4 rows)

サポートされている拡張機能とそのインストール方法については、「Heroku Postgres での拡張機能、PostGIS、フルテキスト検索辞書​」を参照してください。

Google Cloud Storage 内のファイルの署名付き URL を取得する

次に、pg_dump​ バックアップから新しい Heroku Postgres データベースにすべてのデータを復元します。これには、バックアップファイルを指す URL が必要です。gcloud​ CLI​ を使用すると、gcloud storage sign-url​ 操作を使用してこの URL を生成できます。Cloud Storage オブジェクトにアクセスする権限を持つサービスアカウントを作成したことを確認してください。コマンドは次のようになります。

$ gcloud storage sign-url \
    gs://postgres-for-migration/data-for-migration.sql \
    --private-key-file=/path/to/service/account/key-file.json \
    --duration=10m

署名付き URL は、指定した期間のみ一時的に有効です。適切な有効期限 (10 分など) を選択してください。生成される署名付き URL には、署名のほか、クエリパラメータなどのその他のメタデータが含まれます。次の例のようになります。

https://storage.googleapis.com/postgres-for-migration/data-for-migration.sql?x-goog-signature=8bd06523e76bc303158880306af5c4fe9626b21427f69f70d2453aa95e63fd142f6825b2b0c5115d2b4ecbbf92ce9dcb3b206f92062f77db43d5ff631e083a64aa0bbe126672cf57ede6d33a229d444882db88cc5e408295f627e75f73393b9a7a42056c311f4b8b173b36836aa8aaf80ff59d4fc4819f14d33745219bb04dbc831ad85b74721201ab7be2f83afbba0601b0cf6817ed93f43121331fdc5aabb40efa2d9f606d4313255c3f85a75f6787e1ca8e58776ea9547954910522002784b3f0fab784559d6b8f97cb1648c22b229ab82811cb0185c709226502462a2fc90d44f6406d925150b4ec1f252cff18f5c1eaa43ada3b06247209bcd2445e2f1c&x-goog-algorithm=GOOG4-RSA-SHA256&x-goog-credential=gloud-sign-urls%40postgres-migration-437205.iam.gserviceaccount.com%2F20240930%2Fus-east1%2Fstorage%2Fgoog4_request&x-goog-date=20240930T063217Z&x-goog-expires=600&x-goog-signedheaders=host

Heroku で復元する

署名付き URL が取得できたら、Heroku pg:backups:restore​ コマンドを使用して、Google Cloud Storage のファイルから Heroku Postgres データベースを復元します。コマンドは次のようになります。

$ heroku pg:backups:restore 'GOOGLE-SIGNED-URL-IN-QUOTES' \
    --app psql-migration-from-google \
    --confirm psql-migration-from-google

Use Ctrl-C at any time to stop monitoring progress; the backup will continue restoring.
Use heroku pg:backups to check progress.
Stop a running restore with heroku pg:backups:cancel.

Starting restore of [GOOGLE-SIGNED-URL] to postgresql-elliptical-46201... done
Restoring... done

このコマンドでは次の点に留意してください。

  • Google の署名付き URL を貼り付ける場合は、必ず引用符で囲みます。
  • --app​ 引数を提供し、操作するアプリケーションと対応するデータベースを Heroku に指示します。
  • このコマンドは破壊的であるため、確認が必要です。--confirm​ 引数を提供しない場合は、続行する前に操作の確認を求められます。

カスタム設定を移行する

/tmp/settings_postgres.csv​ というファイルに Google Cloud SQL Postgres の構成を保存した​のと同様に、以下のコマンドを使用して、Heroku Postgres の構成も保存できます。

$ heroku pg:psql --app postgres-migration-from-google \
    -c "\copy (select * from pg_settings) to '/tmp/settings_heroku.csv' with (format csv, header true);"

Heroku Postgres の設定と Google Cloud SQL の設定を比較します。Google の設定から構成を見つけて、Heroku Postgres インスタンスに再適用します。

移行が完了したことをテストで検証する

テストを実施して、データが正常に移行されたことを検証することをお勧めします。テストでは以下のことを実施できます。

  • 2 つのデータベース間でテーブル数を比較する。
  • 2 つのデータベース間で各テーブルの行数を比較する。
  • 2 つのデータベース間でクエリ結果を比較する。
  • 新しいデータベースでさまざまな受け入れテストを実施し、適切な動作とパフォーマンスを検証する。

既存のアプリケーションとサービスを接続する

データベースの移行が完了したことを確認したら、既存のアプリケーションとサービスを新しいデータベースに接続します。

Heroku Postgres の資格情報を取得する

Heroku Postgres アドオンを作成すると、Heroku は DATABASE_URL​ という新しい環境変数を自動的に設定します。これには、新しいデータベースの資格情報と接続情報が含まれています。変数を取得するには、heroku config:get​ コマンドを実行します。

$ heroku config:get DATABASE_URL --app psql-migration-from-google

postgres://u7j1fm3qa8npss:p890a576e7717f06e81f4bba65f8f901cd00c7a402ef6570af470c251933347eb@c2ihhcf1divl18.cluster-czrs8kj4isg7.us-east-1.rds.amazonaws.com:5432/d4sqvro2ljuspb

heroku:pg:credentials​ コマンドで資格情報を検索することもできます。

Postgres URI は次の形式に従うため、個々の部分を解析できます。

postgres://DB_USERNAME:DB_PASSWORD@DB_HOST:DB_PORT/DB_NAME

連動するシステムを更新してテストする

この情報を使用して、Heroku Postgres に接続するように既存のシステムを更新します。各システムをテストして、接続が完了したことを確認します。

この時点で、Google Cloud SQL データベースを停止することもできます。データベースの Overview (概要) ページの上部に移動し、Stop (停止) をクリックします。

Google でデータベースを停止する

まとめ

アプリケーションとサービスが Heroku Postgres に接続され、想定どおりに実行されるようになったため、メンテナンスウィンドウを終了して、エンドユーザーの全面的なアクセスを復元できます。

移行が完了し、Google Cloud SQL データベースが不要になったことが確認できたら、完全に削除​できます。

移行が完了すると、Heroku Postgres の柔軟性と低コストの利便性を活用できるようになります。データベースの使用についての詳細は、Heroku Postgres のドキュメント​を参照してください。

Information & Support

  • Getting Started
  • Documentation
  • Changelog
  • Compliance Center
  • Training & Education
  • Blog
  • Support Channels
  • Status

Language Reference

  • Node.js
  • Ruby
  • Java
  • PHP
  • Python
  • Go
  • Scala
  • Clojure
  • .NET

Other Resources

  • Careers
  • Elements
  • Products
  • Pricing
  • RSS
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku Blog
    • Heroku News Blog
    • Heroku Engineering Blog
  • Twitter
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku
    • Heroku Status
  • Github
  • LinkedIn
  • © 2026 Salesforce, Inc. All rights reserved. Various trademarks held by their respective owners. Salesforce Tower, 415 Mission Street, 3rd Floor, San Francisco, CA 94105, United States
  • heroku.com
  • Legal
  • Terms of Service
  • Privacy Information
  • Responsible Disclosure
  • Trust
  • Contact
  • Cookie Preferences
  • Your Privacy Choices