PostgreSQL 中的扩展和模块是强大的工具,可用于扩展数据库系统的功能。 它们的范围从简单的 SQL 对象到复杂的二进制库,它们提供核心 PostgreSQL 分发中不可用的额外特性和功能。
插件
若要定义扩展,至少需要一个包含 SQL 命令的 脚本文件 来创建扩展分发的对象,以及一个指定扩展本身的基本属性的 控件文件 。
在数据库中创建、安装或加载扩展时,它们将部署一组捆绑对象来扩展引擎的功能。 这些对象可以是函数、运算符、角色、数据类型、访问方法和其他数据库对象类型。
从数据库中删除、卸载或卸载扩展时,该过程将删除扩展创建的所有对象。 这种情况的一个例外是,当数据库中有其他对象依赖于扩展定义的任何对象时。
可以编写由 SQL 或 PL/pgSQL 中扩展分发的那些对象提供的功能的实现。 但你也可以在单独的共享库(二进制)文件中实现它,这是编译实现该功能的源代码(通常用 C 或 Rust 编写的)的结果。
在 PostgreSQL 中,可以通过 CREATE EXTENSION、ALTER EXTENSION、DROP EXTENSION 和 COMMENT ON EXTENSION 命令来管理扩展。
-
CREATE EXTENSION创建、安装或将扩展加载到在其中执行命令的数据库中。 -
ALTER EXTENSION将扩展更新到较新版本。 -
DROP EXTENSION从执行该命令的数据库中删除、卸载或取消加载扩展。 -
COMMENT ON EXTENSION将关于扩展的注释作为数据库对象存储。
服务器启动时,它会定义所有后端进程可以访问的内存区域,以便协作运行任何工作负荷。 在 PostgreSQL 行业术语中,该内存区域被称为“共享内存”。
使用共享库实现功能的一些扩展需要从这些库中生成的代码访问该共享内存区域。 这些扩展还有一个要求,即服务器启动时,主引擎进程必须加载其共享库文件。 对于这些库,请按照 加载库中的说明进行操作。
模块
尽管它们不被视为扩展,因为它们没有用于在数据库中部署捆绑的 SQL 对象的控制文件和脚本文件,但 PostgreSQL 中的另一种扩展形式是在独立共享二进制库文件中实现功能。
服务器启动时,可以在内存中加载这些文件。 它们可以实现通常绕开 PostgreSQL 的自然执行路径的代码,以更改引擎的默认功能。 此类行为更改通常旨在放大引擎的某些有限功能。
Azure Database for PostgreSQL 支持以下模块:
- auto_explain
- pg_failover_slots
- pg_partman_bgw
- wal2json