pg_extension_base

Snowflake 提供的 PostgreSQL 扩展开发基础设施,支持库预加载、扩展生命周期后台工作进程和依赖管理

概览

扩展包名版本分类许可证语言
pg_lake3.4OLAPApache-2.0C
ID扩展名BinLibLoadCreateTrustReloc模式
2560pg_lakelake
2561pg_extension_baseextension_base
2562pg_extension_updaterextension_updater
2563pg_mapmap_type
2564pg_lake_engine__lake__internal__nsp__
2565pg_lake_iceberglake_iceberg
2566pg_lake_table__pg_lake_table_writes
2567pg_lake_copypg_catalog
相关扩展
下游依赖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.

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY3.41817161514pg_lake-
RPMPIGSTY3.4.01817161514pg_lake_$v-
DEBPIGSTY3.4.01817161514postgresql-$v-pg-lake-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64N/AN/AN/AN/AN/A
el8.aarch64N/AN/AN/AN/AN/A
el9.x86_64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
el9.aarch64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
el10.x86_64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
el10.aarch64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
d12.x86_64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
d12.aarch64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
d13.x86_64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
d13.aarch64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
u22.x86_64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
u22.aarch64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
u24.x86_64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
u24.aarch64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
u26.x86_64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A
u26.aarch64PIGSTY 3.4.0PIGSTY 3.4.0PIGSTY 3.4.0N/AN/A

构建

您可以使用 pig build 命令构建 pg_lake 扩展的 RPM / DEB 包:

pig build pkg pg_lake         # 构建 RPM / DEB 包

安装

您可以直接安装 pg_lake 扩展包的预置二进制包,首先确保 PGDGPIGSTY 仓库已经添加并启用:

pig repo add pgsql -u          # 添加仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

pig install pg_lake;          # 当前活跃 PG 版本安装
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

预加载配置

shared_preload_libraries = 'pg_extension_base';

创建扩展

CREATE EXTENSION pg_extension_base;

用法

来源:

pg_extension_base 是 Snowflake 为其他 PostgreSQL 扩展提供的基础设施扩展。它提供了基于控制文件的库预加载、数据库范围的生命周循环工作者、依赖感知型更新以及短生命周期附加工作者。应用程序用户通常将其作为 pg_lake 的依赖项安装;扩展开发人员可以直接使用其 C 和 SQL API。

启用基础设施

在其他扩展可以使用 pg_extension_base 的启动机制之前,必须预加载它:

shared_preload_libraries = 'pg_extension_base'

重启 PostgreSQL,然后在一个托管依赖扩展的数据库中创建它:

CREATE EXTENSION pg_extension_base;

SELECT * FROM extension_base.list_preload_libraries();
SELECT * FROM extension_base.list_base_workers();

扩展开发人员工作流

一个依赖扩展可以使用控制文件指令请求启动加载:

requires = 'pg_extension_base'
module_pathname = '$libdir/my_extension'
#!shared_preload_libraries

要附加数据库生命周期工作者,定义一个内部 C 函数并在扩展安装期间注册它:

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'
);

基础基础设施在服务器启动、CREATE EXTENSION 或从模板创建数据库后会启动该工作者,并尝试在 DROP EXTENSIONDROP DATABASE 时停止它。

SQL API 索引

  • extension_base.list_preload_libraries(): 报告发现用于启动加载的扩展/库对。
  • extension_base.register_worker(name, regproc)deregister_worker(name): 管理生命周期工作者注册;公共执行被撤销。
  • extension_base.list_base_workers(): 报告基础工作者的数据库、扩展、PID 及重启状态。
  • extension_base.list_database_starters(): 报告每个数据库的启动进程。
  • extension_base.run_attached(command, dbname): 在短生命周期工作者中运行命令,可选地在另一个数据库中,并返回命令 ID 和标签。

运营边界

  • 生命周期工作者函数以超级用户身份运行且不在事务之外。它们必须开始自己的事务、检查中断并避免信任用户控制的 SQL。
  • 关于失败 DROP 操作的工作者终止是尽力而为;工作者代码必须容忍扩展短暂消失或停止被撤销。
  • run_attached 用于独立工作的有界任务,可能独立于调用者提交。它不是长时间运行任务的分离作业队列。
  • 版本 3.4 相对于 3.3 没有任何面向用户的 SQL 对象更改;其升级脚本故意为空。