37.16. 扩展大楼基础架构

如果您正在考虑分发 PostgreSQL 扩展模块,则为它们构建可移植的构建系统可能会非常困难。因此,PostgreSQL 安装提供了用于扩展的构建基础结构,称为 PGXS,因此可以简单地针对已安装的服务器构建简单的扩展模块。 PGXS 主要用于包含 C 代码的扩展,尽管它也可以用于纯 SQL 扩展。注意,PGXS 并不是一个通用的构建系统框架,可用于构建任何与 PostgreSQL 接口的软件。它只是简单地自动化了简单服务器扩展模块的通用构建规则。对于更复杂的软件包,您可能需要编写自己的构建系统。

要将 PGXS 基础结构用于扩展,必须编写一个简单的 makefile。在生成文件中,您需要设置一些变量并包括全局 PGXS 生成文件。这是一个构建名为isbn_issn的扩展模块的示例,该模块由包含一些 C 代码的共享库,扩展控制文件,SQL 脚本和文档文本文件组成:

MODULES = isbn_issn
EXTENSION = isbn_issn
DATA = isbn_issn--1.0.sql
DOCS = README.isbn_issn

PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)

最后三行应始终相同。在文件的前面,您分配了变量或添加了定制规则。

设置以下三个变量之一以指定要构建的内容:

也可以设置以下变量:

将此扩展文件作为Makefile放置在 extensions 所在的目录中。然后,您可以make进行编译,然后make install进行模块安装。默认情况下,extensions 是针对与PATH中找到的第一个pg_config程序相对应的 PostgreSQL 安装编译和安装的。您可以通过在 makefile 或make命令行中将PG_CONFIG指向其pg_config程序来使用其他安装。

如果要将构建目录分开,也可以在扩展程序源树之外的目录中运行make。此过程也称为 * VPATH *构建。这是如何做:

mkdir build_dir
cd build_dir
make -f /path/to/extension/source/tree/Makefile
make -f /path/to/extension/source/tree/Makefile install

另外,您可以按照与核心代码相似的方式为 VPATH 构建设置目录。一种方法是使用核心脚本config/prep_buildtree。完成此操作后,您可以通过设置make变量VPATH进行构建,如下所示:

make VPATH=/path/to/extension/source/tree
make VPATH=/path/to/extension/source/tree install

此过程可以使用更多的目录布局。

REGRESS变量中列出的脚本用于模块的回归测试,可以在完成make install之后由make installcheck调用。为此,您必须具有正在运行的 PostgreSQL 服务器。 REGRESS中列出的脚本文件必须出现在扩展目录中名为sql/的子目录中。这些文件必须具有.sqlextensions,该 extensions 不能包含在 makefile 的REGRESS列表中。对于每个测试,还应该在名为expected/的子目录中有一个包含预期输出的文件,该文件具有相同的词干和 extensions.outmake installcheck使用 psql 执行每个测试脚本,并将结果输出与匹配的预期文件进行比较。任何差异将以diff -c格式写入文件regression.diffs。请注意,尝试运行缺少预期文件的测试将报告为“麻烦”,因此请确保您拥有所有预期文件。

Tip

创建预期文件的最简单方法是创建空文件,然后进行测试运行(当然,这将报告差异)。检查在results/目录中找到的实际结果文件,然后将其复制到expected/(如果它们符合测试期望的结果)。

上一章 首页 下一章