目录
本附录与下一附录包含有关 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 38.16。
但请注意,其中有些模块并不是这种意义上的“扩展”,而是通过其他方式加载到服务器中,例如借助shared_preload_libraries。详情见各模块文档。
adminpack提供了一些支持函数,pgAdmin和其他管理与维护工具可使用这些函数提供附加功能,例如远程管理服务器日志文件。默认情况下,只有超级用户才允许使用所有这些函数,但也可以使用GRANT命令允许其他用户使用。
Table F.1中显示的函数提供对承载服务器的机器上文件的写访问。(另见Table 9.88中的函数,它们提供只读访问。)除非用户是超级用户,或者根据函数的不同被授予 pg_read_server_files 或 pg_write_server_files 角色之一,否则只能访问数据库集簇目录内的文件,但可以使用相对路径或绝对路径。
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)。