---
title: Installing Third Party Extensions
---

<Note>
  [Foreign data
  wrapper](https://www.postgresql.org/docs/current/ddl-foreign-data.html)
  extensions can be used to query AWS S3 and other external data stores directly
  from ParadeDB.
</Note>

Postgres has a rich ecosystem of extensions. To keep the size of the ParadeDB Dockerfile small, only the ParadeDB extension — `pg_search` — and a limited set of third party extensions are included:

- `pg_search` for full text search
- `pgvector` for vector search
- `postgis` for geospatial search
- `pg_ivm` for incremental materialized views
- `pg_cron` for cron jobs

<Note>
  `pg_cron` is configured on the default `postgres` database and cannot be
  changed.
</Note>

However, additional Postgres extensions can be installed inside existing ParadeDB Docker and Kubernetes deployments.

## Installing Third Party Extensions

The process for installing an extension varies by extension. Generally speaking, it requires:

- Download the prebuilt binaries inside ParadeDB
- Install the extension binary and any dependencies inside ParadeDB
- Add the extension to `shared_preload_libraries` in `postgresql.conf`, if required by the extension
- Run `CREATE EXTENSION <extension name>`

We recommend installing third party extensions from prebuilt binaries to keep the image size small. As an
example, let's install [pg_partman](https://github.com/pgpartman/pg_partman), an extension for managing table partition sets.

### Install Prebuilt Binaries

First, enter a shell with root permissions in the ParadeDB image.

```bash
docker exec -it --user root paradedb bash
```

<Note>
  This command assumes that your ParadeDB container name is `paradedb`.
</Note>

Next, install the [prebuilt binaries](https://pkgs.org/search/?q=partman).
Most popular Postgres extensions can be installed with `apt-get install`.

```bash
apt-get update
apt-get install -y --no-install-recommends postgresql-17-partman
```

<Note>
  If the extension is not available with `apt-get install`, you can usually
  `curl` the prebuilt binary from a GitHub Release page. You will need to first
  install `curl` via `apt-get install` if you are taking this approach.
</Note>

### Add to `shared_preload_libraries`

<Accordion title="Modifying shared_preload_libraries">

If you are installing an extension which requires this step, you can do so
via the following command, replacing `<extension_name>` with your extension's name:

```bash
sed -i "/^shared_preload_libraries/s/'\([^']*\)'/'\1,<extension_name>'/" /var/lib/postgresql/data/postgresql.conf
```

For `pg_partman`, the command is:

```bash
sed -i "/^shared_preload_libraries/s/'\([^']*\)'/'\1,pg_partman_bgw'/" /var/lib/postgresql/data/postgresql.conf
```

</Accordion>

Postgres must be restarted afterwards. We recommend simply restarting the Docker container.

### Create the Extension

Connect to ParadeDB via `psql` and create the extension.

```sql
CREATE EXTENSION pg_partman;
```

`pg_partman` is now ready to use!

Note that this is a simple example of installing `pg_partman`. The full list of settings and optional dependencies can be found in the [official installation instructions](https://github.com/pgpartman/pg_partman?tab=readme-ov-file#installation).
