pg_extension_base
pg_lake : Extension development kit by Snowflake
Overview
| ID | Extension | Package | Version | Category | License | Language |
|---|---|---|---|---|---|---|
| 2561 | pg_extension_base
|
pg_lake
|
3.4 |
OLAP
|
Apache-2.0
|
C
|
| Attribute | Has Binary | Has Library | Need Load | Has DDL | Relocatable | Trusted |
|---|---|---|---|---|---|---|
--sLd--
|
No
|
Yes
|
Yes
|
Yes
|
no
|
no
|
| Relationships | |
|---|---|
| Schemas | extension_base pg_catalog |
| Need By | pg_extension_updater
pg_lake_engine
|
| Siblings | pg_lake
pg_extension_updater
pg_map
pg_lake_engine
pg_lake_iceberg
pg_lake_table
pg_lake_copy
|
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.
Packages
| Type | Repo | Version | PG Major Compatibility | Package Pattern | Dependencies |
|---|---|---|---|---|---|
| EXT | PIGSTY
|
3.4 |
18
17
16
15
14
|
pg_lake |
- |
| RPM | PIGSTY
|
3.4.0 |
18
17
16
15
14
|
pg_lake_$v |
- |
| DEB | PIGSTY
|
3.4.0 |
18
17
16
15
14
|
postgresql-$v-pg-lake |
- |
| Linux / 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
|
Source
pig build pkg pg_lake; # build rpm/debInstall
Make sure PGDG and PIGSTY repo available:
pig repo add pgsql -u # add both repo and update cacheInstall this extension with pig:
pig install pg_lake; # install via package name, for the active PG version
pig install pg_extension_base; # install by extension name, for the current active PG version
pig install pg_extension_base -v 18; # install for PG 18
pig install pg_extension_base -v 17; # install for PG 17
pig install pg_extension_base -v 16; # install for PG 16Config this extension to shared_preload_libraries:
shared_preload_libraries = 'pg_extension_base';Create this extension with:
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_librariesTo 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.