Navigation

Extensions

Postgres

(Updated )

PostgreSQL extensions are add-on modules that extend the functionality of your database beyond the core features. They provide additional data types, functions, operators, indexes, and other capabilities without requiring modifications to the PostgreSQL source code.

Extensions work by packaging related database objects (functions, data types, operators, etc.) into a single installable unit. When you install an extension, PostgreSQL loads the necessary code and creates the required database objects in your database schema. This modular approach allows you to add only the functionality you need while keeping your database lightweight and maintainable.

Types of Extensions

PostgreSQL extensions generally fall into two main categories:

Native Extensions

These are extensions that ship with PostgreSQL itself and are maintained by the PostgreSQL core team. Examples include:

  • Data type extensions: citext, hstore, uuid-ossp for specialized data types
  • Index extensions: btree_gin, btree_gist for advanced indexing capabilities
  • Text search extensions: unaccent, pg_trgm for full-text search enhancements
  • Utility extensions: pgcrypto for cryptographic functions, tablefunc for table manipulation

Community Extensions

These are developed and maintained by the community or third-party organizations. Popular examples include:

  • Vector search: pgvector for AI/ML vector operations
  • Query optimization: pg_hint_plan for query plan hints
  • Partitioning: pg_partman for automated table partitioning

Warning

Extensions that modify shared memory settings, background worker processes, or core database functionality typically require a restart. You can only enable these extensions through the Dashboard.

Most simple extensions like data types or functions can be installed without a restart.

Managing Extensions

Note

Some extensions may require that you use a role with superuser privileges to enable them on your PlanetScale for Postgres database. See supported extensions for more information.

Installing an Extension

To install an extension in your database, use the CREATE EXTENSION command:

CREATE EXTENSION IF NOT EXISTS pgcrypto;

Removing an Extension

To remove an extension from your database, use the DROP EXTENSION command:

DROP EXTENSION IF EXISTS pgcrypto;

Updating an Extension

To update an extension to a newer version, use the ALTER EXTENSION command:

ALTER EXTENSION pgcrypto UPDATE;

Viewing Installed Extensions

To see all extensions currently installed in your database, use this query:

SELECT name, default_version, installed_version, comment
FROM pg_available_extensions
WHERE installed_version IS NOT NULL
ORDER BY name;

To view all available extensions (both installed and available for installation):

SELECT name, default_version, comment
FROM pg_available_extensions
ORDER BY name;

Installing Extensions in Specific Schemas

By default, extensions are installed in the public schema. To install an extension in a specific schema:

CREATE EXTENSION IF NOT EXISTS pgcrypto SCHEMA my_schema;

To move an existing extension to a different schema:

ALTER EXTENSION pgcrypto SET SCHEMA new_schema;

Note: Not all extensions support being installed in non-public schemas. Most utility and data type extensions work fine, but some system-level extensions must remain in the public schema.

Configuring Extensions in the Dashboard

Configuring Extensions

Some extensions require explicit configuration through the PlanetScale dashboard and may consume additional resources on your database instances. Configuring these extensions may require a database restart. The extensions that require a restart are marked with a ✅ in the "Restart required" column. For Production clusters, these reboots are applied in a rolling cadence through the cluster's instances.

For detailed configuration instructions and parameter descriptions for each extension, please refer to their individual documentation pages via the 📝 links in the "Additional Notes" column.

Troubleshooting

Common Extension Issues

Extension not found

ERROR: extension "extension_name" is not available

This means the extension is not installed on the server or not supported. Check the supported extensions list below.

Permission denied

ERROR: permission denied to create extension "extension_name"

Extensions typically require database owner or superuser privileges. Contact support if you encounter permission issues.

Extension already exists

ERROR: extension "extension_name" already exists

Use CREATE EXTENSION IF NOT EXISTS extension_name; to avoid this error, or check installed extensions first.

Dependency conflicts

ERROR: required extension "dependency_name" is not installed

Some extensions depend on others. Install the required dependency first, then retry installing your desired extension.

Supported Extensions

Table Column Legend

  • Extension: Extension name with link to official documentation
  • Description: Brief description of extension functionality
  • Version: Version number available in PlanetScale (or TBD if placeholder)
  • Superuser required: ⭐ = Extension requires superuser privileges to use its functionality
  • Restart required: ✅ = Must be enabled through PlanetScale dashboard first because the extension requires shared libraries and a restart (blank = install directly with CREATE EXTENSION)
  • Additional Notes: 📝 = Link to detailed configuration documentation

Supported Native PostgreSQL Extensions

ExtensionDescriptionVersionSuperuser requiredRestart requiredAdditional Notes
autoincFunctions for autoincrementing fields1.0
bloomBloom filter index access method1.0
btree_ginProvides GIN operator classes that implement B-tree equivalent behavior for various data types1.3
btree_gistProvides GiST index operator classes that implement B-tree equivalent behavior1.7
citextProvides case-insensitive character string type1.6
cubeData type for representing multidimensional cubes1.5
dict_intText search dictionary template for integers1.0
dict_xsynText search dictionary for extended synonym processing1.0
earthdistanceCalculate great circle distances on the surface of the Earth1.2
fuzzystrmatchFunctions for determining similarities and distance between strings1.2
hstoreData type for storing sets of key/value pairs within a single PostgreSQL value1.8
insert_usernameFunctions for tracking who changed a table1.0
intaggInteger aggregator and enumerator (deprecated)1.1
intarrayFunctions and operators for manipulating null-free arrays of integers1.5
isnData types for international product numbering standards1.2
loSupport for managing Large Objects (also called BLOBs)1.1
ltreeData type for representing labels of data stored in hierarchical tree-like structures1.3
moddatetimeFunctions for tracking last modification time1.0
pg_stat_statementsProvides a means for tracking planning and execution statistics of all SQL statements1.11📝
pg_trgmFunctions and operators for determining the similarity of alphanumeric text based on trigram matching1.6
pgcryptoCryptographic functions for PostgreSQL1.3
pgrowlocksShow row-level locking information1.2
pgstattupleObtain tuple-level statistics1.5
plpgsqlLoadable procedural language for the PostgreSQL database system1.0
postgres_fdwForeign data wrapper for remote PostgreSQL servers1.1
segData type for representing line segments or floating-point intervals1.4
tablefuncFunctions that return tables (multiple rows)1.0
tcnProvides a trigger function that notifies listeners of changes to any table1.0
tsm_system_rowsTable sampling method SYSTEM_ROWS which can be used in TABLESAMPLE clause1.0
tsm_system_timeTable sampling method SYSTEM_TIME which can be used in TABLESAMPLE clause1.0
unaccentText search dictionary for removing accents (diacritic signs) from lexemes1.1
uuid-osspFunctions to generate universally unique identifiers (UUIDs)1.1

Supported Community Extensions

ExtensionDescriptionVersionSuperuser requiredRestart requiredAdditional Notes
address_standardizerUsed to parse an address into constituent elements. Generally used to support geocoding address normalization step. (Part of PostGIS)3.6.0
address_standardizer_data_usAddress Standardizer US dataset example. (Part of PostGIS)3.6.0
pg_cronSimple cron-based job scheduler for PostgreSQL that allows you to run SQL commands on a schedule1.6📝
pg_hint_planProvides query plan hints to control the PostgreSQL planner1.7.0📝
pg_partmanExtension to create and manage both time-based and serial-based table partition sets5.2.4
pg_partman_bgwBackground worker to automatically run partition maintenance for pg_partman5.2.4📝
pg_squeezeAutomatically cleans up unused space in tables (table bloat)1.8📝
pgvectorOpen-source vector similarity search for PostgreSQL, designed for AI/ML applications0.8.0
postgisPostGIS extends the capabilities of the PostgreSQL relational database by adding support for storing, indexing, and querying geospatial data3.6.0
postgis_sfcgalSFCGAL is a C++ wrapper library around CGAL that provides advanced 2D and 3D spatial functions3.6.0
postgis_tiger_geocoderA plpgsql based geocoder written to work with the TIGER (Topologically Integrated Geographic Encoding and Referencing system) / Line and Master Address database export released by the US Census Bureau3.6.0
postgis_topologyThe PostGIS Topology types and functions are used to manage topological objects such as faces, edges and nodes3.6.0

PlanetScale Extensions

These extensions are installed by PlanetScale and cannot be disabled.

ExtensionDescriptionVersionAdditional Notes
pgextwlistPostgreSQL Extension AllowlistN/A
pginsightsPlanetScale Insights pluginN/A📝
pg_pscale_utilsUtility extension to handle superuser actions in PlanetScale PostgresN/A

Need Additional Extensions?

If you require an extension that is not currently supported, please reach out to support. We regularly evaluate and add new extensions based on customer needs and security considerations.

Need help?

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