This page describes how to migrate your databases to a pre-existing Cloud SQL for PostgreSQL instance created directly in Cloud SQL.
This path is useful for scenarios where your destination instance is managed by a different team, or if you need to create the instance outside Database Migration Service (for example, if you use Terraform, need specific custom flags, or require advanced network topologies). If your migration has different requirements, consider following a different migration flow. For more information, see Get started with PostgreSQL migrations.
At a high level, the migration follows these steps:
- Configure the source database to allow Database Migration Service to move your data to the new databases.
- Set up the network connectivity to your source PostgreSQL instance.
- Prepare and configure your existing destination Cloud SQL instance.
- Create the source connection profile and the migration job.
- Start and monitor the migration job.
- Promote the migration job and move your application to use the new databases.
Costs
In this document, you use the following billable components of Google Cloud:
- Cloud SQL (See Cloud SQL pricing.)
- If used for storing Customer-managed Encryption Keys (CMEK): Cloud Storage (See Cloud Storage pricing.)
To generate a cost estimate based on your projected usage, use the pricing calculator.
Before you begin
- Verify if this migration path can fully support your scenario.
See the following pages:
- Supported sources and destinations on the Scenario overview page lists all supported source and destination versions.
- Known limitations for existing instances describes limitations, including the requirement that your existing destination instance must not contain existing user-defined data.
- Consider in which region you want to create the destination database. Database Migration Service is a fully-regional product, meaning all entities related to your migration (source and destination connection profiles, migration jobs, destination databases, conversion workspaces) must be saved in a single region.
- In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
- Enable the Database Migration Service and Cloud SQL Admin APIs.
Required roles
To get the permissions that you need to perform homogeneous PostgreSQL migrations with Database Migration Service, ask your administrator to grant you the required IAM roles on your project:
-
Database Migration Admin (
roles/datamigration.admin) -
Cloud SQL Editor (
roles/cloudsql.editor) - If you need to create or configure the destination instance outside Database Migration Service, you also
need
Cloud SQL Admin (
roles/cloudsql.admin) -
Cloud SQL Studio User (
roles/cloudsql.studioUser)
For more information about granting roles, see Manage access in the Identity and Access Management documentation.
These predefined roles contain the permissions required to perform homogeneous PostgreSQL migrations with Database Migration Service. To see the exact permissions that are required, expand the Required permissions section:
Required permissions
The following permissions are required to perform homogeneous PostgreSQL migrations with Database Migration Service:
datamigration.*cloudsql.instances.createcloudsql.instances.getcloudsql.instances.listcloudsql.instances.updatecloudsql.instances.deletecloudsql.operations.getcloudsql.users.listcloudsql.users.getcloudsql.users.createcloudsql.users.updatecloudsql.users.delete
You might also be able to get these permissions with custom roles or other predefined roles.
Prepare your source database
To prepare your source data for migration, follow these steps:
- Choose and configure your source network connectivity method.
- Configure your source database instance. At a high level, this includes
the following steps:
- Install the
pglogicalPostgreSQL extension (version 2.2.1 or later) on the source database and on all databases to be migrated. - Configure PostgreSQL parameters: set
wal_level = logical, and ensure adequate values formax_replication_slots,max_wal_senders, andmax_worker_processes. - Grant replication privileges to your migration user, and configure
pg_hba.confto permit connections from the destination Cloud SQL instance.
For detailed instructions, see Configure your source database.
- Install the
- Create the source connection profile.
Prepare and configure your destination instance
When migrating to an existing Cloud SQL instance (such as an instance pre-provisioned by another team or managed with Terraform), ensure that the instance satisfies all Database Migration Service prerequisites before creating your migration job:
- Instance readiness and data state:
- The destination instance must be a standalone instance (not a replica)
in the
RUNNABLEstate. - The instance must reside in the same Google Cloud region as your migration job and connection profile.
- The instance can only be associated with one active migration job at a time.
- The destination instance must not contain existing user data, user-defined tables, or non-system databases. The migration job verification fails if existing user data is present on the instance. For more information, see Limitations for migrations to existing destination instances. If necessary, clear existing data from your destination instance.
- The destination instance must be a standalone instance (not a replica)
in the
- Database flag configuration: Enable the
cloudsql.enable_pglogicalflag on your destination Cloud SQL for PostgreSQL instance. This flag is required for logical replication. For more information on setting flags, see Configuring database flags. - Database user credentials and permissions: Ensure that the required
administrative database user accounts
exist on your destination instance (such as the default
postgresuser or a dedicated migration user with thecloudsqlsuperuserrole) to manage databases and roles. You can create and manage database users using standardpsqlcommands or through the Google Cloud console. For more information, see Manage users in the Cloud SQL documentation. - Network connectivity requirements: Verify that your destination
instance's networking is properly configured to communicate with your source
database according to your chosen connectivity method:
- Private Service Connect: If your destination instance is Private Service Connect-enabled, it must have a Private Service Connect Outbound Network Attachment configured. See Private Service Connect outbound connections in the Cloud SQL documentation.
- Virtual Private Cloud peering (Private Services Access / Private IP): The destination instance must have private IP enabled on the Virtual Private Cloud network that peers with or routes to your source database. See Configure private IP.
- Public IP allowlist: If using public IP connectivity, ensure that you enable public IP on your destination instance and you allowlist the instance outgoing IP addresses (including both primary and secondary outgoing IPs if the instance is configured for high availability) in your source firewall. See Authorize networks for public IP.
- Instance demotion notice:
- For standard PostgreSQL migrations, Database Migration Service demotes the existing standalone destination instance to configure it as an external replica of your source database. You must confirm this demotion when creating the migration job in the Google Cloud console by entering the destination instance ID.
- Demoting the instance doesn't place the Cloud SQL for PostgreSQL database into read-only mode, but you must avoid write operations on tables or databases participating in the migration to prevent replication conflicts.
- Automated backups, point-in-time recovery (PITR), and creating Cloud SQL read replicas are suspended until you promote the migration job. For more information, see Limitations for migrations to existing destination instances.
- If you manage your destination instance using infrastructure-as-code (such as Terraform), Database Migration Service modifies backup and recovery settings during migration. For guidance on handling Terraform configuration drift, see Diagnose issues.
Create and run the migration job
To configure and run your migration, perform the following steps:
- Optional: If you want to manage your own certificates or encryption keys for the migration job, prepare the necessary encryption keys.
-
Create and run the migration job for an existing destination instance.
You can monitor the migration progress, as well as your destination instance health with Database Migration Service observability features. See Migration job metrics.
Finalize the migration
When you decide to switch your application to the new Cloud SQL for PostgreSQL instance, finalize the migration by following these steps:
- Optional: Set up cascading read replicas. If you want to use cascading read replicas, you can configure them when the migration job enters the CDC phase.
- Stop all write operations on your source database. You can switch them to read-only mode to retain operational functionality.
- Promote the migration job.
- Optional: Verify migration data for completeness.
- If you manage your destination database using infrastructure-as-code (such as Terraform), re-apply your configuration after promotion to reconcile any settings adjusted by Database Migration Service during migration.
What's next
Learn more about Google Cloud features for Cloud SQL for PostgreSQL. See Cloud SQL for PostgreSQL features.