Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions menu/navigation.json
Original file line number Diff line number Diff line change
Expand Up @@ -4079,6 +4079,10 @@
"label": "Serverless SQL Databases overview",
"slug": "serverless-sql-databases-overview"
},
{
"label": "Supported PostgreSQL extensions",
"slug": "supported-postgresql-extensions"
},
{
"label": "Planned maintenance",
"slug": "planned-maintenance"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
---
meta:
title: Supported PostgreSQL extensions
description: This page presents the PostgreSQL extensions supported by Serverless SQL Databases and the steps to use them
content:
h1: Supported PostgreSQL extensions
paragraph: This page presents the PostgreSQL extensions supported by Serverless SQL Databases and the steps to use them
tags: sql-databases serverless database extensions postgresql pgvector postgis timescaledb
dates:
validation: 2024-10-08
posted: 2024-10-08
categories:
- serverless
---

Serverless SQL Databases support the most popular [PostgreSQL extensions](#install-an-extension). Due to autoscaling and built-in connection pooling, some [advanced features of extensions might be limited or require workarounds](#supported-extensions).

<Macro id="requirements" />

- A Scaleway account logged into the [console](https://console.scaleway.com)
- [Owner](/identity-and-access-management/iam/concepts/#owner) status or [IAM permissions](/identity-and-access-management/iam/concepts/#permission) allowing you to perform actions in the intended Organization
- [Created a Serverless SQL Database](/serverless/sql-databases/how-to/create-a-database/)

## Install an extension

1. [Connect to your Serverless SQL Database](/serverless/sql-databases/quickstart/#how-to-connect-to-a-database) with a PostgreSQL client (such as `psql`):
```bash
psql "postgres://[user-or-application-id]:[api-secret-key]@[database-hostname]:5432/[database-name]?sslmode=require"
```

2. Run the following command to create an extension using SQL:
```sql
CREATE EXTENSION extension_name;
```

3. Use the supported features of the extension.
For instance, if you installed `pgvector` with `CREATE EXTENSION vector`, you can create a vector and query it:

```sql
CREATE TABLE songs (id bigserial PRIMARY KEY, embedding vector(3));
INSERT INTO songs (embedding) VALUES ('[1,1,1]'), ('[2,2,2]'), ('[0,1,2]');
SELECT * FROM songs ORDER BY embedding <-> '[3,3,3]' LIMIT 5;
```
This example will find the nearest vectors (using L2 distance) from '[3,3,3]':
```sql
id | embedding
----+-----------
2 | [2,2,2]
1 | [1,1,1]
3 | [0,1,2]
```

## Supported extensions

The following PostgreSQL extensions are available with Serverless SQL Databases:


| Extension | Description and known limitations |
|------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------|
| address_standardizer | Parses addresses into their constituent elements, typically used in the geocoding normalization process. |
| address_standardizer_data_us | Provides a dataset example for the US Address Standardizer extension. |
| bloom | Implements a Bloom filter-based index, ideal for situations where space efficiency is crucial. |
| btree_gin | Adds support for indexing common data types using the GIN (Generalized Inverted Index) method. |
| btree_gist | Adds support for indexing common data types using the GiST (Generalized Search Tree) method. |
| citext | Provides a case-insensitive character string data type for easier text comparison. |
| cube | Defines a data type for representing multidimensional cubes, useful in mathematical and geometrical computations. |
| dict_int | Offers a text search dictionary template optimized for integer values. |
| dict_xsyn | Provides a text search dictionary template for advanced synonym processing, improving search accuracy. Features requiring direct access to the filesystem will not be supported (eg. custom synonym lists). |
| earthdistance | Calculates great-circle distances between points on Earth, useful in geographical applications. |
| fuzzystrmatch | Determines similarities and differences between strings, helpful for tasks like data deduplication. |
| hstore | Stores sets of key-value pairs in a single value, enabling a flexible schema for semi-structured data. |
| intagg | Aggregates and enumerates integer values, though it is considered obsolete since PG 8.4, and official support has been integrated in PostgreSQL directly |
| intarray | Provides functions, operators, and indexing support for one-dimensional arrays of integers, enhancing array processing. |
| isn | Supports data types for international product numbering standards, such as ISBN and EAN. |
| ltree | Defines a data type for representing tree-like structures in a hierarchical manner, facilitating complex data modeling. |
| pg_cron | Schedules jobs within PostgreSQL using a cron-like syntax, automating routine database tasks. `pg_cron` requires the database to be in an active state permanently, and thus that you provision at least one vCPU for the extension to properly work. |
| pg_prewarm | Preloads relation data into memory to reduce initial disk I/O latency and improve performance. |
| pg_stat_statements | Tracks planning and execution statistics for all SQL statements, aiding in performance tuning. |
| pg_trgm | Measures text similarity and provides index searching based on trigrams, enhancing text search capabilities. |
| pgcrypto | Provides cryptographic functions for data encryption, decryption, and hashing, essential for secure data storage. |
| pgrouting | Extends PostgreSQL and PostGIS with geospatial routing capabilities, enabling the calculation of shortest paths and other routing operations. |
| pgrowlocks | Displays information about row-level locking, helping in the diagnosis of concurrency issues. |
| pgvector | Supports vector similarity search, often used for storing and searching embeddings in machine learning applications. [Query options](https://github.com/pgvector/pgvector?tab=readme-ov-file#query-options) using `SET` command require [to be used in a single transaction](/serverless/sql-databases/reference-content/known-differences/#unsupported-configuration-commands) (i.e. between `BEGIN; (...) COMMIT;`) |
| plpgsql | Enables the use of PL/pgSQL, a procedural language for PostgreSQL that allows complex control structures and query manipulation. |
| postgis | Adds support for geographic objects, allowing location queries to be run in SQL, and is the foundation of the geographic information system (GIS) functionality in PostgreSQL. |
| postgis_raster | Implements raster data support in PostGIS, enabling analysis and storage of raster images alongside vector data. |
| postgis_sfcgal | Adds advanced 3D geometry functions to PostGIS, leveraging the SFCGAL library for complex spatial operations. |
| postgis_tiger_geocoder | Provides geocoding and reverse geocoding capabilities based on the US Census TIGER data within PostGIS. |
| postgis_topology | Supports topological data models in PostGIS, allowing for advanced spatial relationships and analyses. |
| tablefunc | Offers functions for manipulating entire tables, including crosstab operations for pivot tables. |
| timescaledb | Enables efficient handling and analysis of time-series data, extending PostgreSQL with specialized time-series functions. |
| tsm_system_rows | Implements a `TABLESAMPLE` method that limits the number of rows returned, useful for sampling large datasets. |
| tsm_system_time | Implements a `TABLESAMPLE` method that limits rows based on a time duration, useful for time-based sampling. |
| unaccent | Provides a text search dictionary that removes accents from characters, improving text search accuracy. |
| uuid-ossp | Generates universally unique identifiers (UUIDs), essential for ensuring data uniqueness across distributed systems. |