On this page
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)
最后三行应始终相同。在文件的前面,您分配了变量或添加了定制规则。
设置以下三个变量之一以指定要构建的内容:
MODULES
- 从具有相同词干的源文件构建的共享库对象列表(此列表中不包括库后缀)
MODULE_big
- 从多个源文件构建的共享库(在
OBJS
中列出目标文件)
- 从多个源文件构建的共享库(在
PROGRAM
- 要构建的可执行程序(在
OBJS
中列出目标文件)
- 要构建的可执行程序(在
也可以设置以下变量:
EXTENSION
- extensions;对于每个名称,您必须提供一个
extension.control
文件,该文件将安装到prefix/share/extension
- extensions;对于每个名称,您必须提供一个
MODULEDIR
- 应当将 DATA 和 DOCS 文件安装到的
prefix/share
子目录(如果未设置,则默认为extension
(如果设置为EXTENSION
,否则为contrib
))
- 应当将 DATA 和 DOCS 文件安装到的
DATA
- 随机文件安装到
prefix/share/$MODULEDIR
- 随机文件安装到
DATA_built
- 随机文件要安装到
prefix/share/$MODULEDIR
,需要先构建
- 随机文件要安装到
DATA_TSEARCH
- 在
prefix/share/tsearch_data
下安装随机文件
- 在
DOCS
- 在
prefix/doc/$MODULEDIR
下安装随机文件
- 在
SCRIPTS
- 脚本文件(不是二进制文件)安装到
prefix/bin
- 脚本文件(不是二进制文件)安装到
SCRIPTS_built
- 要安装到
prefix/bin
的脚本文件(不是二进制文件),需要首先构建
- 要安装到
REGRESS
- 回归测试用例列表(无后缀),请参见下文
REGRESS_OPTS
- 其他开关传递给 pg_regress
NO_INSTALLCHECK
- 不要定义有用的
installcheck
目标,例如如果测试需要特殊配置,或者不使用 pg_regress
- 不要定义有用的
EXTRA_CLEAN
- 要在
make clean
中删除的多余文件
- 要在
PG_CPPFLAGS
- 将前置到
CPPFLAGS
- 将前置到
PG_CFLAGS
- 将附加到
CFLAGS
- 将附加到
PG_CXXFLAGS
- 将附加到
CXXFLAGS
- 将附加到
PG_LDFLAGS
- 将前置到
LDFLAGS
- 将前置到
PG_LIBS
- 将被添加到
PROGRAM
链接行
- 将被添加到
SHLIB_LINK
- 将被添加到
MODULE_big
链接行
- 将被添加到
PG_CONFIG
- 用于 PostgreSQL 安装的 pg_config 程序的路径(通常使用
pg_config
来使用PATH
中的第一个)
- 用于 PostgreSQL 安装的 pg_config 程序的路径(通常使用
将此扩展文件作为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/
的子目录中。这些文件必须具有.sql
extensions,该 extensions 不能包含在 makefile 的REGRESS
列表中。对于每个测试,还应该在名为expected/
的子目录中有一个包含预期输出的文件,该文件具有相同的词干和 extensions.out
。 make installcheck
使用 psql 执行每个测试脚本,并将结果输出与匹配的预期文件进行比较。任何差异将以diff -c
格式写入文件regression.diffs
。请注意,尝试运行缺少预期文件的测试将报告为“麻烦”,因此请确保您拥有所有预期文件。
Tip
创建预期文件的最简单方法是创建空文件,然后进行测试运行(当然,这将报告差异)。检查在results/
目录中找到的实际结果文件,然后将其复制到expected/
(如果它们符合测试期望的结果)。