Load Extension
Module:
While most PostgreSQL extensions written in SQL can be directly enabled with CREATE EXTENSION
,
extensions that provide dynamic libraries (.so
, .dylib
, .dll
) have different loading requirements.
Most library-based extensions don’t need explicit loading. However, extensions using PostgreSQL’s Hook mechanism
require an additional step — modifying the shared_preload_libraries
parameter and restarting the database server.
Attempting to execute CREATE EXTENSION
without proper preloading will result in an error.
And wrongly configured loading may lead to a failure on database restart/start.
Quick Start
For example, in the conf/app/supa
config template,
we load multiple extensions by setting the pg_libs
parameter:
all:
children:
pg-meta:
hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
vars:
pg_cluster: pg-meta
pg_databases:
- name: postgres
pg_libs: 'timescaledb, plpgsql, plpgsql_check, pg_cron, pg_net, pg_stat_statements, auto_explain, pg_tle, plan_filter'
Not all extensions require dynamic loading via pg_libs
(e.g., pgcrypto
, pgjwt
, vector
).
For extensions requiring dynamic loading, please refer to the Extensions that Need Loading list below.
Configure
There are several ways to modify PostgreSQL cluster configuration in Pigsty:
For new clusters, configure the pg_libs
parameter to specify the initial value of shared_preload_libraries
.
Note that pg_libs
only takes effect during cluster creation.
After creation, it becomes the initial value for the PostgreSQL parameter shared_preload_libraries
.
To modify loaded extensions in an existing cluster, use the Patroni command line to
config cluster, change shared_preload_libraries
, and restart to apply changes.
Alternatively, you can modify shared_preload_libraries
by editing postgresql.conf
, using the ALTER SYSTEM
command,
or overriding it through pg_parameters
. Ensure configuration remains consistent across the cluster.
Default
Pigsty preloads these two Contrib extensions by default:
auto_explain
: Provides automatic logging of slow query execution planspg_stat_statements
: Tracks planning and execution statistics for grouped SQL statements
These extensions are critical for query performance monitoring, which is why the default value of pg_libs
is pg_stat_statements, auto_explain
.
We strongly recommend retaining these extensions when configuring additional loaded modules.
Caveats
In shared_preload_libraries
, separate multiple extensions with commas:
shared_preload_libraries = 'timescaledb, pg_stat_statements, auto_explain'
Loading sequence can be significant. For example, citus
and timescaledb
must be placed at the beginning of shared_preload_libraries
.
If using both extensions simultaneously (uncommon), place citus
before timescaledb
.
The full-text search plugin pg_search
requires explicit loading in current versions, but in PostgreSQL 17, this requirement is removed.
For the MongoDB emulation plugin documentdb
, note that the dynamic library names differ from the extension names —
use pg_documentdb
and pg_documentdb_core
instead.
Extensions that Need Loading
In the Extension List, extensions marked with LOAD
require dynamic loading and a server restart. These include:
Extension Name ext |
Package Name pkg |
Category | Description |
---|---|---|---|
timescaledb | timescaledb | TIME | Enables scalable inserts and complex queries for time-series data |
pg_cron | pg_cron | TIME | Job scheduler for PostgreSQL |
pg_task | pg_task | TIME | Execute SQL commands at specific times in the background |
vchord | vchord | RAG | Vector database plugin for Postgres, written in Rust |
pgml | pgml | RAG | PostgresML: Run AI/ML workloads with SQL interface |
pg_bestmatch | pg_bestmatch | FTS | Generate BM25 sparse vector inside PostgreSQL |
vchord_bm25 | vchord_bm25 | FTS | PostgreSQL extension for BM25 ranking algorithm |
citus | citus | OLAP | Distributed PostgreSQL as an extension |
pg_duckdb | pg_duckdb | OLAP | DuckDB embedded in PostgreSQL |
pg_parquet | pg_parquet | OLAP | Copy data between PostgreSQL and Parquet files |
plan_filter | pg_plan_filter | FEAT | Filter statements by their execution plans |
omni | omnigres | FEAT | Advanced adapter for PostgreSQL extensions |
pg_tle | pg_tle | LANG | Trusted Language Extensions for PostgreSQL |
plpgsql_check | plpgsql_check | LANG | Extended checker for PL/pgSQL functions |
pgpdf | pgpdf | TYPE | PDF type with metadata and full-text search |
pglite_fusion | pglite_fusion | TYPE | Embed an SQLite database in your PostgreSQL table |
pg_net | pg_net | UTIL | Asynchronous HTTP requests |
pg_squeeze | pg_squeeze | ADMIN | Tool to remove unused space from a relation |
pgautofailover | pgautofailover | ADMIN | Automated failover manager for PostgreSQL |
pg_crash | pg_crash | ADMIN | Send random signals to random processes |
pg_prewarm | pg_prewarm | ADMIN | Prewarm relation data |
pg_tracing | pg_tracing | STAT | Distributed tracing for PostgreSQL |
pg_stat_kcache | pg_stat_kcache | STAT | Kernel statistics gathering |
pg_stat_monitor | pg_stat_monitor | STAT | PostgreSQL query performance monitoring tool with aggregated statistics, client information, plan details, and histogram information |
pg_qualstats | pg_qualstats | STAT | Extension collecting statistics about predicate expressions |
pg_store_plans | pg_store_plans | STAT | Track execution plan statistics of SQL statements |
pg_wait_sampling | pg_wait_sampling | STAT | Sampling-based statistics of wait events |
bgw_replstatus | bgw_replstatus | STAT | Background worker reporting replication primary/standby status |
pg_relusage | pg_relusage | STAT | Log queries that reference a particular column |
auto_explain | auto_explain | STAT | Automatically log execution plans of slow statements |
pg_stat_statements | pg_stat_statements | STAT | Track planning and execution statistics of SQL statements |
passwordcheck_cracklib | passwordcheck | SEC | Strengthen PostgreSQL password checks with cracklib |
supautils | supautils | SEC | Extension to secure clusters in cloud environments |
pgsodium | pgsodium | SEC | PostgreSQL extension for libsodium cryptographic functions |
anon | pg_anon | SEC | PostgreSQL Anonymizer extension |
pg_tde | pg_tde | SEC | Transparent data encryption method |
pgaudit | pgaudit | SEC | Provides detailed session and object audit logging |
pg_snakeoil | pg_snakeoil | SEC | PostgreSQL antivirus extension |
pgextwlist | pgextwlist | SEC | PostgreSQL extension whitelisting |
noset | pg_noset | SEC | Module blocking SET commands for non-superusers |
sepgsql | sepgsql | SEC | Label-based mandatory access control based on SELinux security policy |
auth_delay | auth_delay | SEC | Brief pause before reporting authentication failures |
passwordcheck | passwordcheck | SEC | Checks and rejects weak passwords |
documentdb | documentdb | SIM | API surface for DocumentDB for PostgreSQL |
documentdb_core | documentdb | SIM | Core API for DocumentDB for PostgreSQL |
documentdb_distributed | documentdb | SIM | Multi-node API for DocumentDB |
pg_statement_rollback | pg_statement_rollback | SIM | Statement-level rollback similar to Oracle or DB2 |
babelfishpg_tsql | babelfishpg_tsql | SIM | SQL Server T-SQL compatibility |
pglogical_ticker | pglogical_ticker | ETL | Accurate monitoring of pglogical replication delay |
pg_failover_slots | pg_failover_slots | ETL | Failover slot management for logical replication |
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.