Skip to main content

Overview

PlanetScale Postgres runs on PostgreSQL versions 17 and 18. See our supported versions documentation for the specific versions available. PlanetScale Postgres is designed to be fully compatible with standard PostgreSQL. Unlike PlanetScale Vitess, which has certain MySQL compatibility limitations, PlanetScale Postgres supports the full PostgreSQL feature set, including stored procedures, triggers, and foreign keys.

Full PostgreSQL feature support

PlanetScale Postgres supports all core PostgreSQL features:
FeatureSupportNotes
Stored procedures and functionsFull support for CREATE FUNCTION and CREATE PROCEDURE
Foreign keys and constraintsAll constraint types supported
TriggersAll trigger types supported
Materialized viewsFull support including REFRESH MATERIALIZED VIEW
Transactions and ACIDFull transactional support
JSON/JSONBAll JSON functions and operators
Full-text searchIncluding tsvector, tsquery, and related functions
Table partitioningRange, list, and hash partitioning
Logical replicationAs source or target — see logical replication documentation
Window functionsFull support
Common Table Expressions (CTEs)Including recursive CTEs
LISTEN/NOTIFYFull support for pub/sub messaging

Tool compatibility

PlanetScale Postgres works with the PostgreSQL ecosystem:
  • Drivers: Standard PostgreSQL drivers and connection strings (libpq, psycopg, pg, node-postgres, etc.)
  • ORMs: Prisma, ActiveRecord, Sequelize, Drizzle, Django ORM, SQLAlchemy, and others
  • Monitoring: pganalyze, Datadog DBM — see monitoring documentation
  • Migration tools: pgcopydb, AWS DMS — see import documentation
  • CDC tools: Debezium, Fivetran, Airbyte, ClickPipes — see CDC documentation

PlanetScale-specific behaviors

While PlanetScale Postgres is fully PostgreSQL-compatible, there are some platform-specific behaviors to be aware of.

Roles and permissions

The following reference describes PlanetScale-specific permission behaviors.
BehaviorDescription
No SUPERUSER accessPlanetScale does not grant SUPERUSER privileges as part of our security model. The default role has near-superuser capabilities. See role management for details.
Default role permissionsThe default postgres role has NOSUPERUSER CREATEDB CREATEROLE INHERIT LOGIN REPLICATION BYPASSRLS and inherits permissions including pg_read_all_data, pg_write_all_data, pg_monitor, pg_read_all_settings, pg_read_all_stats, pg_stat_scan_tables, pg_signal_backend, pg_checkpoint, pg_maintain, pg_use_reserved_connections, and pg_create_subscription. See role management for the complete list.
User-defined rolesCreate application-specific roles with minimal required permissions. Roles created via the dashboard, CLI, or API are managed by PlanetScale.
Most operations that would require SUPERUSER in vanilla PostgreSQL work with PlanetScale’s default role. If you encounter a specific use case requiring elevated permissions, contact support.

Extensions

PlanetScale supports a curated list of vetted PostgreSQL extensions. See the extensions documentation for the complete list.
BehaviorDescription
Curated extension listExtensions must be on our supported list. You can request new extensions or contact support.
Version pinningExtension versions are pinned to each PostgreSQL major version and do not auto-upgrade.
Restart requirementsSome extensions require a cluster restart to enable. These are marked in the extensions documentation.
Dashboard configurationExtensions requiring shared memory or background workers must be enabled through the PlanetScale dashboard.
When migrating to PlanetScale Postgres, verify that your required extensions are supported and check version compatibility. Extensions like PostGIS may have version differences that affect functionality.

Branch behavior

PlanetScale Postgres uses branches for isolated database environments.
BehaviorDescription
Configuration not inheritedNew branches start with default configuration. Extensions and custom parameters must be re-enabled on each branch.
Isolated environmentsBranches are completely isolated. Schema and data changes in one branch do not affect others.
No automatic schema syncUnlike PlanetScale Vitess deploy requests, schema changes must be manually applied to each branch.

Configuration and logging

BehaviorDescription
Log line prefixThe log_line_prefix does not include database (%d) and user (%u) identifiers by default.
Default search pathDefault search_path is "$user", public. Custom search paths from source databases need manual configuration via ALTER ROLE ... SET search_path = 'your_schema'.
Parameter changesSome parameters require a cluster restart. See parameters documentation for details.

Operational characteristics

BehaviorDescription
Failover behaviorProduction clusters have 1 primary and 2 replicas. Failovers typically complete in seconds. See operations philosophy.
Disk autoscalingStorage autoscaling is enabled by default for network-attached storage clusters, automatically growing disk when utilization thresholds are reached. See storage configuration.
No CPU/RAM autoscalingCluster sizing is manual. Use the Clusters page to monitor utilization and resize as needed.

Migrating to PlanetScale Postgres

For detailed migration guidance, including step-by-step instructions for importing your existing PostgreSQL database, see our import documentation.

Need help?

Get help from the PlanetScale Support team, or join our GitHub discussion board to see how others are using PlanetScale.