合 PG编译中的USE_PGXS参数
简介
如果你正在考虑发布你的PostgreSQL扩展模块,为它们建立一个可移植的构建系统实在是相当困难。因此PostgreSQL安装为扩展提供了一种被称为PGXS构建基础设施,因此简单的扩展模块能够在一个已经安装的服务器上简单地编译。PGXS主要是为了包括 C 代码的扩展而设计,不过它也能用于纯 SQL 的扩展。注意PGXS并不想成为一种用于构建任何与PostgreSQL交互的软件的通用构建系统框架。它只是简单地把简单服务器扩展模块的公共构建规则自动化。对于更复杂的包,你可能需要编写你自己的构建系统。
要把PGXS基础设施用于你的扩展,你必须编写一个简单的 makefile。在这个 makefile 中,你需要设置一些变量并且把它们包括在全局的PGXS makefile 中。这里有一个例子,它构建一个名为isbn_issn
的扩展模块,其中包括一个含有 C 代码的共享库、一个扩展控制文件、一个 SQL 脚本、一个包括文件(仅当其他模块可能需要通过调用而不是SQL访问这个扩展的函数时才需要)以及一个文档文件:
1 2 3 4 5 6 7 8 9 | MODULES = isbn_issn EXTENSION = isbn_issn DATA = isbn_issn--1.0.sql DOCS = README.isbn_issn HEADERS_isbn_issn = isbn_issn.h PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS) |
最后三行应该总是相同的。在这个文件的前面部分,你要对变量赋值或者增加自定义的make规则。
设置这三个变量之一来指定要构建什么:
MODULES
要从源文件构建的具有相同词干的共享库对象的列表(不要在这个列表中包括库后缀)
MODULE_big
一个要从多个源文件中构建的共享库(在
OBJS
中列出对象文件)PROGRAM
一个要构建的可执行程序(在
OBJS
中列出对象文件)
还可以设置下列变量:
EXTENSION
扩展名称;你必须为每一个名称提供一个
*
extension*.control
文件,它将被安装到*
prefix*/share/extension
中MODULEDIR
subdirectory of
*
prefix*/share
的子目录,DATA 和 DOCS 文件会被安装到其中(如果没有设置,设置了EXTENSION
时默认为extension
,没有设置EXTENSION
时默认为contrib
)DATA
要安装到
*
prefix*/share/$MODULEDIR
中的随机文件DATA_built
要安装到
*
prefix*/share/$MODULEDIR
中的随机文件,它们需要先被构建DATA_TSEARCH
要安装到
*
prefix*/share/tsearch_data
中的随机文件DOCS
要安装到
*
prefix*/doc/$MODULEDIR
中的随机文件HEADERS
HEADERS_built
要(构建并且)安装在
*
prefix*/include/server/$MODULEDIR/$MODULE_big
下面的文件。和DATA_built
不同,HEADERS_built
中的文件不会被clean
目标移除,如果想要移除它们,把它们也加入到EXTRA_CLEAN
或者增加自己的规则来做这件事。HEADERS_$MODULE
HEADERS_built_$MODULE
要安装(如果指定了构建则在构建之后安装)在
*
prefix*/include/server/$MODULEDIR/$MODULE
之下的文件,这里$MODULE
必须是一个在MODULES
orMODULE_big
中用到的模块名。和DATA_built
不同,HEADERS_built_$MODULE
中的文件不会被clean
目标移除,如果想要移除它们,把它们也加入到EXTRA_CLEAN
或者增加自己的规则来做这件事。可以为同一个模块同时使用这两个变量或者两者的任意组合,除非你在MODULES
列表中有两个模块名称仅有前缀built_
上的区别,因为那样会导致歧义。在那种情况下(还好不太可能),应该仅使用HEADERS_built_$MODULE
变量。SCRIPTS
要安装到
*
prefix*/bin
中的脚本文件(非二进制)SCRIPTS_built
要安装到
*
prefix*/bin
中的脚本文件(非二进制),它们需要先被构建REGRESS
回归测试案例(不带后缀)的列表,见下文
REGRESS_OPTS
要传递给pg_regress的附加开关
本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!