If you have IP restrictions in place on your source database and need to grant a set of IP addresses access, see our Import public IP addresses documentation.
Migration Options Overview
PlanetScale Postgres provides three primary migration approaches to suit different business requirements, database sizes, and downtime tolerances:Migrate using pg_dump & pg_restore
Migrate using WAL streaming
Migrate using pgcopydb
1. pg_dump & pg_restore
The pg_dump method is the simplest approach for migrating smaller PostgreSQL databases. This method involves creating a full backup of your source database using PostgreSQL’s built-inpg_dump utility and then restoring it to your PlanetScale Postgres database.
How it works:
- Export your entire database schema and data using pg_dump
- Transfer the dump file to PlanetScale Postgres
- Restore the database using pg_restore or psql
2. WAL Log Replication
Write-Ahead Logging (WAL) replication provides a near-zero downtime migration by continuously streaming transaction logs from your source PostgreSQL database to PlanetScale Postgres. How it works:- Set up logical replication between your source database and PlanetScale Postgres
- Stream WAL logs in real-time to keep the target database synchronized
- Perform a quick cutover when ready to switch to the new database
3. pgcopydb
pgcopydb automates thepg_dump | pg_restore pipeline by copying table data in parallel without intermediate files and building indexes concurrently. PlanetScale maintains a fork with PostgreSQL 17 and 18 support, improved filtering, resilient retry, and improved CDC support. PlanetScale also provides helper scripts for setup, monitoring, cutover, and cleanup.
How it works:
- Copy schema from source using
pg_dump - Copy table data in parallel using
COPYwith configurable concurrency - Build indexes and constraints concurrently on the target
- Optionally stream changes via logical decoding for near-zero downtime CDC
- Perform cutover when replication is caught up
Migration Method Comparison
| Feature | pg_dump & pg_restore | WAL Log Replication | pgcopydb |
|---|---|---|---|
| Best For | Small databases | Production databases requiring minimal downtime | Large databases requiring fast parallel migration |
| Data Size | <20GB | <150GB | >=150GB |
| Downtime | High (up to an hour) | Minimal (minutes) | Minimal (minutes) |
| Setup Complexity | Low | Medium | Medium |
| Infrastructure Requirements | None (built-in tools) | Source DB configuration changes | Migration instance with network access |
| Data Consistency | Point-in-time snapshot | Real-time sync | Real-time sync via CDC |
| Cost | Free (built-in tools) | Low (minimal resources) | Low (migration instance only) |
| Schema Changes During Migration | Not supported | Limited support | Not supported |
| Data Transformation | None | Limited | None |
| Error Handling | Manual intervention required | Basic retry mechanisms | Resumable with retry and exponential backoff |
| Rollback Options | Manual restore from backup | Stop replication, switch back | Stop CDC, switch back |
Migration Considerations
Before migrating your PostgreSQL database to PlanetScale Postgres, there are several important factors to consider to ensure a smooth migration process.PostgreSQL Version Compatibility
PlanetScale Postgres supports PostgreSQL 18 and PostgreSQL 17. If your source database is running an older version of PostgreSQL, you should verify compatibility and consider upgrading your source database before migration, or plan for potential compatibility issues during the migration process. For major version upgrades, use pgcopydb. Only pgcopydb supports migrations across PostgreSQL major versions; pg_dump & pg_restore and WAL log replication are intended for same-major-version imports. PlanetScale has successfully migrated companies from PostgreSQL 13 and newer to PostgreSQL 18 with pgcopydb. Version considerations:- PostgreSQL 18: Fully supported
- PostgreSQL 17: Fully supported
- Earlier versions: May require additional testing and validation
- Version-specific features: Newer features may not be available in older versions
Upgrading from PostgreSQL 17 to 18 on PlanetScale
We don’t currently offer an automated in-place major version upgrade from PostgreSQL 17 to 18. You can perform an online upgrade by migrating from your existing PlanetScale Postgres 17 database to a new PostgreSQL 18 database using pgcopydb:- For major version upgrades: follow the pgcopydb guide
- Create a new PostgreSQL 18 database (same region and similar configuration).
- Use pgcopydb to sync data from your PostgreSQL 17 database.
- Validate data and application behavior, then update your application connection string to the new database.
- Decommission the old PostgreSQL 17 database when you’re ready.
Extension Support
Many PostgreSQL databases rely on extensions to provide additional functionality, but not all extensions are supported by PlanetScale Postgres. See the list of supported extensions. Important notes about extensions:- Review your current database’s installed extensions using
\dxin psql or by queryingpg_extension - Identify which extensions are critical to your application’s functionality
- Plan for alternative approaches if critical extensions are not supported
- Test your application thoroughly in a staging environment before migrating production data
- PostGIS — Geospatial functions and data types may change between versions
- Full-text search extensions (
pg_trgm,unaccent,dict_int) — Dictionary and tokenization behavior can vary between versions - UUID extensions — During replication, UUID generation can cause value misalignment if source and target use different generation methods
- pg_stat_statements
Third-Party Enhancements and Tools
PlanetScale Postgres does not support third-party enhancements to PostgreSQL’s core capabilities. This includes: Currently unsupported:- Custom background workers
- Third-party connection poolers (like PgBouncer)
- External procedural languages beyond the standard ones
- Third-party monitoring tools that require database-level access
- Custom shared libraries or plugins
PlanetScale Postgres includes connection pooling by default.
- Migrate custom functions to standard PostgreSQL syntax where possible.
- Utilize Metrics, Insights, and 3rd party integrations for monitoring.
Pre-Migration Checklist
Before starting your migration:Database Assessment
- Document your current PostgreSQL version
- List all installed extensions and their usage
- Identify any third-party tools or enhancements in use
- Review custom functions and stored procedures
Compatibility Testing
- Test your application against your target PostgreSQL version (18 or 17)
- Validate that critical extensions are supported or have alternatives
- Identify any custom code that may need modification
Get Started
Follow the migration guide that’s right for you:Migrate using pg_dump & pg_restore
Migrate using WAL streaming
Migrate using pgcopydb
Migrate from Heroku
Heroku does not support logical replication, so the WAL streaming approach above won’t work for Heroku Postgres. Use the dedicated Heroku migration guide instead, which provides a migration tool with a web dashboard.

