pg_extension_base
Overview
| Package | Version | Category | License | Language |
|---|---|---|---|---|
pg_lake | 3.4 | OLAP | Apache-2.0 | C |
| ID | Extension | Bin | Lib | Load | Create | Trust | Reloc | Schema |
|---|---|---|---|---|---|---|---|---|
| 2560 | pg_lake | Yes | Yes | Yes | Yes | No | No | lake |
| 2561 | pg_extension_base | No | Yes | Yes | Yes | No | No | extension_base |
| 2562 | pg_extension_updater | No | Yes | Yes | Yes | No | No | extension_updater |
| 2563 | pg_map | No | Yes | No | Yes | No | No | map_type |
| 2564 | pg_lake_engine | No | Yes | Yes | Yes | No | No | __lake__internal__nsp__ |
| 2565 | pg_lake_iceberg | No | Yes | No | Yes | No | No | lake_iceberg |
| 2566 | pg_lake_table | No | Yes | Yes | Yes | No | No | __pg_lake_table_writes |
| 2567 | pg_lake_copy | No | Yes | Yes | Yes | No | No | pg_catalog |
| Related | pg_tle pg_readme pgextwlist ddlx pgdd meta pg_command_fw supautils |
|---|---|
| Depended By | pg_extension_updater pg_lake_engine |
Set shared_preload_libraries=pg_extension_base. It auto-loads dependent libraries declared through the pg_lake control-file marker and manages extension lifecycle background workers. Extension SQL/control version is 3.4; source and DEB/RPM package version is 3.4.0.
Version
| Type | Repo | Version | PG Ver | Package | Deps |
|---|---|---|---|---|---|
| EXT | PIGSTY | 3.4 | 1817161514 | pg_lake | - |
| RPM | PIGSTY | 3.4.0 | 1817161514 | pg_lake_$v | - |
| DEB | PIGSTY | 3.4.0 | 1817161514 | postgresql-$v-pg-lake | - |
| OS / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | N/A | N/A | N/A | N/A | N/A |
| el8.aarch64 | N/A | N/A | N/A | N/A | N/A |
| el9.x86_64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| el9.aarch64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| el10.x86_64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| el10.aarch64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| d12.x86_64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| d12.aarch64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| d13.x86_64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| d13.aarch64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| u22.x86_64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| u22.aarch64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| u24.x86_64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| u24.aarch64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| u26.x86_64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
| u26.aarch64 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | PIGSTY 3.4.0 | N/A | N/A |
Build
You can build the RPM / DEB packages for pg_lake using pig build:
pig build pkg pg_lake # build RPM / DEB packages
Install
You can install pg_lake directly. First, make sure the PGDG and PIGSTY repositories are added and enabled:
pig repo add pgsql -u # Add repo and update cache
Install the extension using pig or apt/yum/dnf:
pig install pg_lake; # Install for current active PG version
pig ext install -y pg_lake -v 18 # PG 18
pig ext install -y pg_lake -v 17 # PG 17
pig ext install -y pg_lake -v 16 # PG 16
dnf install -y pg_lake_18 # PG 18
dnf install -y pg_lake_17 # PG 17
dnf install -y pg_lake_16 # PG 16
apt install -y postgresql-18-pg-lake # PG 18
apt install -y postgresql-17-pg-lake # PG 17
apt install -y postgresql-16-pg-lake # PG 16
Preload:
shared_preload_libraries = 'pg_extension_base';
Create Extension:
CREATE EXTENSION pg_extension_base;
Usage
Sources:
- Official pg_extension_base README
- Version 3.4 control file
- SQL API definition
- pg_lake build and preload guide
pg_extension_base is Snowflake’s infrastructure extension for other PostgreSQL extensions. It provides control-file-driven library preloading, database-scoped lifecycle workers, dependency-aware updates, and short-lived attached workers. Application users normally install it as a dependency of pg_lake; extension developers use its C and SQL APIs directly.
Enable the Infrastructure
pg_extension_base must be preloaded before extensions can use its startup machinery:
shared_preload_libraries = 'pg_extension_base'
Restart PostgreSQL, then create it in a database that hosts dependent extensions:
CREATE EXTENSION pg_extension_base;
SELECT * FROM extension_base.list_preload_libraries();
SELECT * FROM extension_base.list_base_workers();
Extension-Developer Workflow
A dependent extension can request startup loading with a control-file directive:
requires = 'pg_extension_base'
module_pathname = '$libdir/my_extension'
#!shared_preload_libraries
To attach a database lifecycle worker, define an internal C function and register it during extension installation:
CREATE FUNCTION my_extension.main_worker(internal)
RETURNS internal
LANGUAGE C
AS 'MODULE_PATHNAME', 'my_extension_main_worker';
SELECT extension_base.register_worker(
'my_extension_main',
'my_extension.main_worker'
);
The base infrastructure starts the worker after server startup, CREATE EXTENSION, or creation of a database from a template, and attempts to stop it for DROP EXTENSION or DROP DATABASE.
SQL API Index
extension_base.list_preload_libraries(): reports extension/library pairs discovered for startup loading.extension_base.register_worker(name, regproc)andderegister_worker(name): manage lifecycle-worker registrations; public execution is revoked.extension_base.list_base_workers(): reports database, extension, PID, and restart state for base workers.extension_base.list_database_starters(): reports per-database starter processes.extension_base.run_attached(command, dbname): runs a command in a short-lived worker, optionally in another database, and returns command IDs and tags.
Operational Boundaries
- Lifecycle worker functions run as superuser and outside a transaction. They must start their own transactions, check interrupts, and avoid trusting user-controlled SQL.
- Worker termination around failed
DROPoperations is best effort; worker code must tolerate the extension briefly disappearing or a stop being reversed. run_attachedis for bounded work that may commit independently of the caller. It is not a detached job queue for long-running tasks.- Version
3.4changes no user-facing SQL objects relative to3.3; its upgrade script is intentionally empty.
Feedback
Was this page helpful?
Thanks for the feedback! Please let us know how we can improve.
Sorry to hear that. Please let us know how we can improve.