このページの一部またはすべての情報は、S3NS の Trusted Cloud に適用されない場合があります。詳細については、
Google Cloud との違いをご確認ください。
外部レプリカを構成する
このページでは、
logical decoding
で
pglogical 拡張機能を使用して Cloud SQL 外部のレプリカを複製する Cloud SQL インスタンスを構成する方法について説明します。
レプリケーションの詳細については、Cloud SQL でのレプリケーションをご覧ください。
外部レプリカの構成を行う
始める前に
このタスクを開始する前に、外部レプリカの要件を満たす Cloud SQL インスタンスと外部 PostgreSQL インスタンスを用意しておく必要があります。
- Trusted Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。
- プライマリ インスタンスで外部レプリカの IP アドレスへのアクセスを有効にします。
IP アクセスの有効化の詳細については、IP 接続のためのアクセスを構成するをご覧ください。
- 後で使用できるように、プライマリ インスタンスのパブリック IP アドレスとパブリック送信 IP アドレスを記録します。これらの値はインスタンスの [概要] ページで確認できます。
- 右上隅の Cloud Shell アイコン(
)をクリックします。
- Cloud Shell プロンプトで、組み込み PostgreSQL クライアントを使用してプライマリ インスタンスに接続します。
gcloud sql connect PRIMARY_INSTANCE_NAME \
--user=postgres
- root パスワードを入力します。postgres プロンプトが表示されます。
REPLICATION
属性を持つ PostgreSQL ユーザーを作成します。CREATE USER REPLICATION_USER WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
- pglogical 拡張機能をインストールして構成します。
Cloud SQL インスタンスを編集して、以下のフラグを追加して設定します。
データベースを再起動してログインし、plication_user に切り替えて pglogical
拡張機能を作成します。
CREATE EXTENSION pglogical;
- pglogical ノードを作成します。
pglogical ノードは物理的な PostgreSQL インスタンスを表し、そのインスタンスの接続の詳細を保存しています。
SELECT pglogical.create_node(
node_name := 'provider',
dsn := 'host=PRIMARY_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
);
- 新しいデータベースで開始する場合は、プライマリ インスタンスとレプリカ インスタンスの両方に同じデータベースとテーブルを作成します。次に例を示します。
CREATE DATABASE test;
\connect test;
CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
CREATE EXTENSION pglogical;
- プライマリ インスタンスにデータベースがすでに存在する場合は、レプリカでもデータベースを作成する必要があります。これを行うには、プライマリ インスタンスから Cloud Storage バケットにデータベースをエクスポートし、レプリカにインポートします。詳しくは、Cloud SQL から Cloud Storage の SQL ダンプファイルにデータをエクスポートするをご覧ください。
-
異なるデータセットを異なる宛先に複製できるように、pglogical はレプリケーション セットのコンセプトに対応しています。たとえば、テーブルをデフォルトのレプリケーション セットに追加するには、次のコマンドを実行します。
SELECT pglogical.replication_set_add_table('default', 'replica_test', true);
- レプリケーション用に特別なユーザーを作成し、レプリケーションの権限を付与します。
CREATE USER REPLICATION_USER WITH REPLICATION SUPERUSER LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
- 新しいデータベースで開始する場合は、REPLICATION_USER を使用して、プライマリ インスタンスとレプリカ インスタンスの両方に同じデータベースとテーブルを作成します。次に例を示します。
CREATE DATABASE test;
\connect test;
CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
- プライマリ インスタンスからエクスポートしたファイルを外部レプリカ インスタンスにシードするには、エクスポートしたファイルを Cloud Storage からダウンロードします。外部レプリカが Compute Engine インスタンス上にある場合は、
gcloud storage
コマンドを使用してファイルをダウンロードできます。gcloud storage cp gs://BUCKET_NAME/DUMP_FILE_NAME .
- ファイルをデータベースにインポートします。
psql --user=postgres --password < DUMP_FILE_NAME.
- OS に応じて
pglogical
をインストールします。たとえば、PostgreSQL バージョン 13 を実行する Debian システムの場合は、sudo apt-get install postgresql-13-pglogical
です。
- replication_user としてデータベースにログインし、次のパラメータを設定します。
ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
ALTER SYSTEM SET max_replication_slots = #; (where # is the same as you set on the primary).
ALTER SYSTEM SET max_worker_processes = #; (where # is the same as you set on the primary).
# Logout of the database and restart it. For example,
# sudo /etc/init.d/postgresql restart
# Log back in the database as the replication_user.
# Since the pglogical extension is created local to each database, you need to
# execute CREATE EXTENSION pglogical
in each database you create, so if you
# haven't already done that:
CREATE EXTENSION pglogical;
For more information about these flags, see the PostgreSQL resources page.
- pglogical ノードを作成します。
SELECT pglogical.create_node(
node_name := 'subscriber',
dsn := 'host=REPLICA_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
);
- pglogical サブスクリプションを作成します。
SELECT pglogical.create_subscription(
subscription_name := 'SUBSCRIPTION_NAME',
provider_dsn := 'host=PRIMARY_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
);
- サブスクリプションのステータスを確認します。
SELECT * FROM pglogical.show_subscription_status('SUBSCRIPTION_NAME');
- ステータスが「
replicating
」と表示されている場合、設定は成功です。
- 一部のデータをプライマリに挿入し、レプリカにもデータが存在することを確認します。
トラブルシューティング
pglogical のトラブルシューティングをご覧ください。
次のステップ
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2025-08-30 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-08-30 UTC。"],[],[],null,["# Configure external replicas\n\n\u003cbr /\u003e\n\n[MySQL](/sql/docs/mysql/replication/configure-external-replica \"View this page for the MySQL database engine\") \\| PostgreSQL \\| [SQL Server](/sql/docs/sqlserver/replication/configure-external-replica \"View this page for the SQL Server database engine\")\n\n\u003cbr /\u003e\n\nThis page describes how to configure a Cloud SQL instance that replicates to a replica external to Cloud SQL using the [pglogical extension](/sql/docs/postgres/replication/configure-logical-replication) with `logical decoding`.\n\nFor more information about replication, see\n[About replication in Cloud SQL](/sql/docs/postgres/replication).\n\nSet up the external replica configuration\n-----------------------------------------\n\n### Before you begin\n\nBefore you start this task, you must have a Cloud SQL instance and an\nexternal PostgreSQL instance that meets the [requirements for external\nreplicas](/sql/docs/postgres/replication#external-read-replicas).\n\n### Configure the primary instance\n\n1. Go to the [Cloud SQL Instances page](https://console.cloud.google.com/sql/instances) in the Google Cloud console.\n2. Enable access on the primary instance for the IP address of the external replica. For information about enabling IP access, see\n [Configuring access for IP connections](/sql/docs/postgres/configure-ip).\n\n3. Record the public IP address and the public outgoing IP address of the primary instance for later use. You can find these values on the instance's **Overview** page.\n4. Click the Cloud Shell icon in the upper right corner.\n5. At the Cloud Shell prompt, use the built-in PostgreSQL client to connect to your primary instance: \n\n ```bash\n \n gcloud sql connect PRIMARY_INSTANCE_NAME \\\n --user=postgres\n \n \n ```\n6. Enter your root password. You should then see the postgres prompt.\n7. Create a PostgreSQL user with the `REPLICATION` attribute. \n\n CREATE USER \u003cvar translate=\"no\"\u003eREPLICATION_USER\u003c/var\u003e WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD '\u003cvar translate=\"no\"\u003eREPLICATION_USER_PASSWORD\u003c/var\u003e';\n \n8. Install and configure the pglogical extension: Edit the Cloud SQL instance to add and set the following flags:\n\n - `cloudsql.enable_pglogical`\n - `cloudsql.logical_decoding`\n - `max_replication_slots`\n - `max_worker_processes`\n - `max_wal_senders`\n - For more information about these flags, see the [PostgreSQL resources](/sql/docs/postgres/replication/configure-logical-replication#postgresql-resources) page.\n\n Restart the database, then login, change to the replication_user,\n create the `pglogical` extension: \n\n ```sql\n CREATE EXTENSION pglogical;\n \n ```\n9. Create a pglogical node:\n A pglogical _node_ represents a physical PostgreSQL instance, and stores\n connection details for that instance.\n\n ```sql\n SELECT pglogical.create_node(\n node_name := 'provider',\n dsn := 'host=\u003cvar translate=\"no\"\u003ePRIMARY_PUBLIC_IP_ADDRESS\u003c/var\u003e port=5432 dbname=\u003cvar translate=\"no\"\u003eDATABASE_NAME\u003c/var\u003e user=\u003cvar translate=\"no\"\u003eREPLICATION_USER\u003c/var\u003e password=\u003cvar translate=\"no\"\u003eREPLICATION_USER_PASSWORD\u003c/var\u003e'\n );\n \n ```\n10. If you are starting with a new database, create the same database and tables on both the primary and replica instances. For example: \n\n ```sql\n CREATE DATABASE test;\n\n \\connect test;\n\n CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);\n INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');\n\n CREATE EXTENSION pglogical;\n ```\n11. If you already have a database on the primary instance, you must create the same on the replica. To do this, export the database from the primary instance to a Cloud Storage bucket and import it into the replica. Learn more about [Exporting data from Cloud SQL to a SQL dump file in Cloud Storage](/sql/docs/postgres/import-export/exporting#cloud-sql).\n12. To support replicating different sets of data to different destinations, pglogical has the concept of a replication set. For example, to add a table to the default replication set: \n\n ```sql\n SELECT pglogical.replication_set_add_table('default', 'replica_test', true);\n \n ```\n\n### Configure the external replica\n\n1. Create a special user for replication and grant replication privileges: \n\n CREATE USER \u003cvar translate=\"no\"\u003eREPLICATION_USER\u003c/var\u003e WITH REPLICATION SUPERUSER LOGIN PASSWORD '\u003cvar translate=\"no\"\u003eREPLICATION_USER_PASSWORD\u003c/var\u003e';\n \n2. If you are starting with a new database, use the \u003cvar translate=\"no\"\u003eREPLICATION_USER\u003c/var\u003e to create the same database and tables on both the primary and replica instances. For example: \n\n ```sql\n CREATE DATABASE test;\n \\connect test;\n CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);\n INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');\n \n ```\n3. If you are seeding the external replica instance with a file you exported file from the primary instance, download the exported file from Cloud Storage. If your external replica is on a Compute Engine instance, you can download the file using the `gcloud storage` command: \n\n ```bash\n gcloud storage cp gs://BUCKET_NAME/DUMP_FILE_NAME .\n \n ```\n4. Import the file into your database. \n\n ```\n psql --user=postgres --password \u003c DUMP_FILE_NAME.\n ```\n5. Install `pglogical` according to your OS. For example, on Debian systems running PostgreSQL version 13, `sudo apt-get install postgresql-13-pglogical`.\n6. Login to the database as the replication_user and set the following parameters: \n\n ALTER SYSTEM SET shared_preload_libraries = 'pglogical';\n ALTER SYSTEM SET max_replication_slots = #; (where # is the same as you set on the primary).\n ALTER SYSTEM SET max_worker_processes = #; (where # is the same as you set on the primary).\n # Logout of the database and restart it. For example,\n # sudo /etc/init.d/postgresql restart\n # Log back in the database as the replication_user.\n # Since the pglogical extension is created local to each database, you need to\n # execute CREATE EXTENSION pglogical in each database you create, so if you\n # haven't already done that:\n CREATE EXTENSION pglogical;\n For more information about these flags, see the /sql/docs/postgres/replication/configure-logical-replication#postgresql-resources page.\n \n7. Create a pglogical node: \n\n ```sql\n SELECT pglogical.create_node(\n node_name := 'subscriber',\n dsn := 'host=\u003cvar translate=\"no\"\u003eREPLICA_PUBLIC_IP_ADDRESS\u003c/var\u003e port=5432 dbname=\u003cvar translate=\"no\"\u003eDATABASE_NAME\u003c/var\u003e user=\u003cvar translate=\"no\"\u003eREPLICATION_USER\u003c/var\u003e password=\u003cvar translate=\"no\"\u003eREPLICATION_USER_PASSWORD\u003c/var\u003e'\n );\n \n ```\n8. Create a pglogical subscription: \n\n ```sql\n SELECT pglogical.create_subscription(\n subscription_name := '\u003cvar translate=\"no\"\u003eSUBSCRIPTION_NAME\u003c/var\u003e',\n provider_dsn := 'host=\u003cvar translate=\"no\"\u003ePRIMARY_PUBLIC_IP_ADDRESS\u003c/var\u003e port=5432 dbname=\u003cvar translate=\"no\"\u003eDATABASE_NAME\u003c/var\u003e user=\u003cvar translate=\"no\"\u003eREPLICATION_USER\u003c/var\u003e password=\u003cvar translate=\"no\"\u003eREPLICATION_USER_PASSWORD\u003c/var\u003e'\n );\n \n ```\n9. Check the status of the subscription: \n\n ```sql\n SELECT * FROM pglogical.show_subscription_status('\u003cvar translate=\"no\"\u003eSUBSCRIPTION_NAME\u003c/var\u003e');\n \n ```\n10. If the status appears as `replicating`, then the setup is successful.\n11. Insert some data into the primary and check the replica to make sure the data appears there as well.\n\nTroubleshoot\n------------\n\nSee [Troubleshooting pglogical](/sql/docs/postgres/replication/configure-logical-replication#troubleshooting-pglogical)\n\nWhat's next\n-----------\n\n- Learn how to [manage replicas](/sql/docs/postgres/replication/manage-replicas).\n- Learn about [requirements and best practices for the external replica configuration](/sql/docs/postgres/replication#external-read-replicas).\n- Learn more about [PostgreSQL replication](https://www.postgresql.org/docs/current/static/logical-replication.html).\n- Learn more about [replication configuration settings](https://www.postgresql.org/docs/current/static/runtime-config-replication.html).\n- Learn more about [replicating from an external server](/sql/docs/postgres/replication/replication-from-external)."]]