PgSQL · 内核开发 · 如何管理你的 PostgreSQL 插件

简介: 一.背景我们都知道 PostgreSQL 提供了丰富数据库内核编程的接口,允许开发者以插件的形式把功能融入数据库内核。PostgreSQL 提供了一个插件管理模块,用于管理用户创建的插件。本文给大家介绍 PostgreSQL 插件管理模块,帮助大家管理自己的插件。二.PostgreSQL的插件内容通常一个 PostgreSQL 内核插件包括下面的部分1. 包含功能的逻辑的动

一.背景

我们都知道 PostgreSQL 提供了丰富数据库内核编程的接口,允许开发者以插件的形式把功能融入数据库内核。

PostgreSQL 提供了一个插件管理模块,用于管理用户创建的插件。

本文给大家介绍 PostgreSQL 插件管理模块,帮助大家管理自己的插件。

二.PostgreSQL的插件内容

通常一个 PostgreSQL 内核插件包括下面的部分

  • 1. 包含功能的逻辑的动态库,即 so 文件。
  • 2. 描述插件信息的的控制文件,即 control 文件。
  • 3. 一组文件用于创建、更新和删除插件,这是一组按照版本命名的 SQL 文本文件。

如果缺少了上述部分,或版本号不正确,插件的管理功能会异常。

三.插件的管理

我们使用 create extension, drop extension alter extension 管理指定的插件。

1.插件的创建

例如 postgres_fdw 的创建

create extension postgres_fdw;
drop extension postgres_fdw;

我们可以选择把插件创建到指定的模式中。

2.插件的管理视图

这是最简单的部分,创建插件后,我们可以通过插件管理视图看到一些细节信息

select * from pg_extension ;
   extname    | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition 
--------------+----------+--------------+----------------+------------+-----------+-------------- 
 postgres_fdw |       10 |         2200 | t              | 1.0        |           | 

可以看到,postgres_fdw 的 owner, 存在的 schema 和插件的小版本。

3.插件的删除

插件的内容可以是任何的数据库对象,例如:函数、操作符等等。

这些对象可能被其他的对象引用,例如我们在 postgres_fdw 创建了基于 postgres_fdw 的外部表。

当我们要删除 postgres_fdw 时,需要加上 cascade 子句,把相关对象一并删除。

drop extension postgres_fdw cascade;

这么做带来的问题是,所有依赖这个插件的对象都会被删除。再次使用需要重建。

4.插件的更新

有时候,我们需要做插件的 BUGFIX ,或定制一些功能。这就用到了插件更新功能。

  • 首先,我们需要升级插件的小版本

修改控制文件 .control, 增加一个小版本,如果当前版本是 1.1,则文件中版本号修改成 1.2

  • 添加新版本的的 DDL SQL 文件

添加新版本的 DDL SQL 文件 *–1.2.sql, 用于从零创建该插件。

该 SQL 文件应该包括该插件的所有对象的 DDL。

  • 添加用户老版本升级到新版本的 DDL SQL 文件

创建 *1.1–1.2.sql,用于从版本 1.1 升级到 1.2

该 SQL 文件只包含 1.2 版本中新创建的对象。用户的升级操作会调用该 SQL 文件,从而避免了完全重新创建。

  • 修改源码添加新的功能,编译并安装到指定目录。

  • 使用 SQL 升级小版本

alter extension postgres_fdw update;

如果成功更新,我们能从视图中看到对应的小版本号被更新了。

postgres=# select * from pg_extension ;
   extname    | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition 
--------------+----------+--------------+----------------+------------+-----------+--------------
postgres_fdw |       10 |         2200 | t              | 1.2        |           | 
(2 rows)

使用 PostgreSQL 的插件管理功能,用户很容开发和维护需要的插件。

其他

有几点需要特别提醒,这是在开发和管理插件时,经常碰到的问题,需要多加注意

  • 插件是通过动态库形式引入到内核中。和内核在同一个进程中运行,且没有内存保护,影响内核的稳定性。开发中需要特别注意内存的使用。不要造成内存泄露或越界写。建议使用 PostgreSQL 的内存管理机制,插件中也能使用。
  • 内核中被标记成 PGDLLIMPORT 的全局变量都能在插件中直接使用,这些通常是一些 GUC 参数。
  • 内核中非 static 的函数也能在插件中使用,只需要先 extern 它们。
  • 我们可以实现 _PG_init 用于实现一些初始化工作,该函数在连接建立后只会被执行一次。
  • 我们可以在 _PG_init 中使用函数 DefineCustom*Variable 定义对应插件相关的 GUC 参数,他们可以用于开启和关闭该插件的一些功能。
  • 插件的参数需要以插件名开头且加上点,例如 oss_fdw.enable_parallel_read。

参考

  1. PostgreSQL 插件的创建
  2. PostgreSQL 插件的删除
  3. PostgreSQL 插件的修改/升级
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
人工智能 关系型数据库 分布式数据库
沉浸式学习PostgreSQL|PolarDB 16: 植入通义千问大模型+文本向量化模型, 让数据库具备AI能力
本文将带领大家来体验一下如何将“千问大模型+文本向量化模型”植入到PG|PolarDB中, 让数据库具备AI能力.
26854 21
沉浸式学习PostgreSQL|PolarDB 16: 植入通义千问大模型+文本向量化模型, 让数据库具备AI能力
|
11月前
|
消息中间件 人工智能 弹性计算
打造你的专属 AI 导游:基于 RocketMQ 的多智能体异步通信实战
在现代 AI 应用中,多智能体(Multi-Agent)系统已成为解决复杂问题的关键架构。然而,随着智能体数量增多和任务复杂度提升,传统的同步通信模式逐渐暴露出级联阻塞、资源利用率低和可扩展性差等瓶颈。为应对这些挑战,RocketMQ for AI 提供了面向 AI 场景的异步通信解决方案,通过事件驱动架构实现智能体间的高效协作。本文将探讨和演示如何利用 RocketMQ 构建一个高效、可靠且可扩展的多智能体系统,以解决企业级 AI 应用中的核心通信难题。
692 77
|
10月前
|
人工智能 自然语言处理 API
AI应用开发-003-Coze平台
智能体是具备感知、决策与行动能力的AI系统,由大语言模型、记忆、规划、工具使用和行动五大核心构成。通过Coze平台可零代码搭建智能体,结合插件、知识库与工作流,实现个性化AI应用,广泛应用于客服、助理、开发等场景。
1325 2
AI应用开发-003-Coze平台
|
弹性计算 运维 关系型数据库
用 Patroni 搭建 PolarDB-PG 高可用集群
本文详细介绍了如何利用开源PolarDB-PG和Patroni搭建高可用集群。实验环境使用了三台ECS,内核版本为PolarDB-PG 15,Patroni版本为4.0.3,etcd版本为3.5.0。文章依次讲解了ETCD的安装与配置、PolarDB-PG 15的安装与初始化,以及Patroni的配置和启动过程。通过Patroni自动创建备库,实现高可用集群的搭建。最后总结指出,用户可根据需求调整配置,或选择线上PolarDB-PG产品以减少运维成本并提升稳定性。
|
10月前
|
人工智能 缓存 自然语言处理
AI网关可能是当下降低推理成本最经济的工程手段
网关成大模型降本关键:无需修改代码,即可节省达 70% 推理开销。
644 4
|
11月前
|
人工智能 运维 安全
2025年主流接口测试工具对比分析与最佳实践指南
文章围绕2025年接口测试工具展开,介绍其在自动化、云化与AI赋能方向的演进。对比SaaS化平台、本地化部署方案及AI驱动型工具的特点、优势与局限,分析行业痛点及解决方案。还给出构建一体化链路的最佳实践,以及工具选择建议,助力企业提升测试效率与质量。
|
11月前
|
数据采集 监控 NoSQL
用n8n打造自愈型用例库与质量知识图谱
三年前,测试团队困于臃肿用例库与信息孤岛。我们基于n8n构建自愈型质量管理系统,打通需求、缺陷与测试数据,实现用例自动修复、智能推荐与持续优化,让质量知识自主进化。
|
存储 人工智能 关系型数据库
拥抱Data+AI|解码Data+AI助力游戏日志智能分析
「拥抱Data+AI」系列第2篇:阿里云DMS+AnalyticDB助力游戏日志数据分析与预测
拥抱Data+AI|解码Data+AI助力游戏日志智能分析
|
弹性计算 机器人 应用服务中间件
AppFlow支持Qwen3开源版本调用
近期,Qwen3正式发布并开源全部8款“混合推理模型”,包括两款MoE模型(Qwen3-235B-A22B与Qwen3-30B-A3B)和六个Dense模型。目前,AppFlow已支持上述所有模型调用,您可在钉钉或微信等多渠道使用这些模型满足业务需求。本文将介绍如何配置及集成这些模型至钉钉机器人和企业微信应用中,包括创建应用、设置权限、生成连接流以及配置相关参数的详细步骤。完成配置后,用户可通过钉钉或企业微信直接与Qwen3应用互动交流。
893 6
AppFlow支持Qwen3开源版本调用
|
数据采集 Web App开发 JavaScript
无头浏览器技术:Python爬虫如何精准模拟搜索点击
无头浏览器技术:Python爬虫如何精准模拟搜索点击

相关产品

  • 云原生数据库 PolarDB
  • 云数据库 RDS PostgreSQL 版