跳转到主要内容

pg_extension_base

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

概览

扩展包名版本分类许可证语言
pg_lake3.5OLAPApache-2.0C
ID扩展名BinLibLoadCreateTrustReloc模式
2560pg_lake是是是是否否lake
2561pg_extension_base否是是是否否extension_base
2562pg_extension_updater否是是是否否extension_updater
2563pg_map否是否是否否map_type
2564pg_lake_engine否是是是否否__lake__internal__nsp__
2565pg_lake_iceberg否是否是否否lake_iceberg
2566pg_lake_table否是是是否否__pg_lake_table_writes
2567pg_lake_copy否是是是否否pg_catalog

pkg 3.5.9; SQL 3.5; preload manages pg_lake modules/workers.

版本

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

构建

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

pig build pkg pg_lake         # 构建 RPM / DEB 包

安装

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

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

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

安装
pig install pg_lake;          # 当前活跃 PG 版本安装
pig
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
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
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_lake 发布与软件包版本为 3.5.3,SQL 扩展版本为 3.5。动态库与查询服务器应使用同一发布版本。

启用基础设施

在其他扩展可以使用 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 EXTENSION 或 DROP 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.5 在 extension_base.list_base_workers() 中新增 failure_count,便于观察工作进程的重启退避。升级会删除并重建该函数;迁移前应检查依赖对象及显式授权。

这个页面对您有帮助吗?