目录
本附录与下一附录包含有关 PostgreSQL 发行版中 contrib 目录中可选组件的信息。 这些组件包括移植工具、分析实用程序,以及不属于 PostgreSQL 核心系统的 插件功能。之所以将它们单独提供,主要是因为它们面向的受众有限, 或者实验性太强,不适合作为主源码树的一部分。但这并不影响它们的实用性。
本附录介绍位于 contrib 中的扩展以及其他服务器插件模块库。 Appendix G 介绍实用程序。
从源码发行版构建时,除非构建“world”目标(见Step 2),否则这些组件不会自动构建。可以运行以下命令来构建并安装所有组件:
makemake install
这些命令应在已配置好的源码树的contrib目录中运行;若只想构建并安装某个选定的模块,则可在该模块的子目录中执行同样的命令。许多模块都带有回归测试,可以运行以下命令来执行:
make check
这是在安装前执行的命令;也可以运行
make installcheck
,此时需要已有一个PostgreSQL服务器正在运行。
如果你使用的是预打包版本的 PostgreSQL, 这些组件通常会作为单独的子包提供,例如 postgresql-contrib。
许多模块提供新的用户定义函数、操作符或类型。安装代码后,要使用其中某个模块,就需要在数据库系统中注册新的 SQL 对象。在PostgreSQL9.1 及后续版本中,这可通过执行CREATE EXTENSION命令完成。在一个新建的数据库中,你可以直接执行:
CREATE EXTENSION module_name;
该命令必须由数据库超级用户执行。它只会在当前数据库中注册新的 SQL 对象,因此需要在每个希望使用该模块功能的数据库中运行它。另一种做法是在数据库template1中运行它,这样该扩展默认会被复制到随后创建的数据库中。
许多模块允许你将其对象安装到所选的模式中。要这样做,请在CREATE EXTENSION命令中加入SCHEMA 。默认情况下,这些对象会被放入当前的创建目标模式,而该模式默认是schema_namepublic。
如果你的数据库是从PostgreSQL9.1 之前的版本通过转储和重新载入升级而来的,并且其中一直在使用该模块的 9.1 之前版本,则应改为执行:
CREATE EXTENSION module_name FROM unpackaged;
这会将该模块在 9.1 之前版本中的对象更新为一个正规的扩展对象。今后该模块的更新将由ALTER EXTENSION管理。有关扩展更新的更多信息,请参见Section 37.15。
但请注意,其中有些模块并不是这种意义上的“扩展”,而是通过其他方式加载到服务器中,例如借助shared_preload_libraries。详情见各模块文档。
adminpack提供了一些支持函数,pgAdmin和其他管理工具可以使用它们来提供额外功能,例如远程管理服务器日志文件。所有这些函数都只允许超级用户使用。
Table F.1所示的函数提供对服务器所在机器上文件的写入访问。(另请参阅Table 9.88中的函数,它们提供只读访问。)只能访问数据库集簇目录内的文件,但相对路径和绝对路径都可以使用。
Table F.1. adminpack 函数
| Name | 返回类型 | 描述 |
|---|---|---|
pg_catalog.pg_file_write(filename text, data text, append boolean) |
bigint |
写入文本文件或向其追加内容 |
pg_catalog.pg_file_rename(oldname text, newname text [, archivename text]) |
boolean |
重命名文件 |
pg_catalog.pg_file_unlink(filename text) |
boolean |
删除文件 |
pg_catalog.pg_logdir_ls() |
setof record |
列出log_directory目录中的日志文件 |
pg_file_write将指定的data写入由filename指定的文件中。如果append为 false,则该文件必须尚不存在。如果append为 true,则该文件可以已经存在,并且若已存在则会向其追加内容。返回写入的字节数。
pg_file_rename重命名文件。如果省略archivename或其值为 NULL,则它只是将oldname重命名为newname(后者必须尚不存在)。如果提供了archivename,它会先将newname重命名为archivename(后者必须尚不存在),然后再将oldname重命名为newname。如果第二个重命名步骤失败,它会在报告错误之前尝试将archivename再改回newname。成功时返回 true;如果源文件不存在或不可写,则返回 false;其他情况会抛出错误。
pg_file_unlink删除指定的文件。成功时返回 true;如果指定的文件不存在,或者unlink()调用失败,则返回 false;其他情况会抛出错误。
pg_logdir_ls返回log_directory目录中所有日志文件的起始时间戳和路径名。要使用此函数,log_filename参数必须保持默认设置(postgresql-%Y-%m-%d_%H%M%S.log)。
Table F.2所示的函数已经弃用,不应在新应用中使用;应改用Table 9.78和Table 9.88所示的函数。adminpack提供这些函数只是为了兼容旧版本的pgAdmin。
Table F.2. 已弃用的adminpack函数
| Name | 返回类型 | 描述 |
|---|---|---|
pg_catalog.pg_file_read(filename text, offset bigint, nbytes bigint) |
text |
pg_read_file()的别名 |
pg_catalog.pg_file_length(filename text) |
bigint |
与pg_stat_file()返回的size列相同 |
pg_catalog.pg_logfile_rotate() |
integer |
pg_rotate_logfile()的别名,但请注意它返回整数 0 或 1,而不是boolean |