I. 教程
II. SQL 语言
III. 服务器管理
- 章14. 安装指导
- 章15. 在 Windows 上安装客户端
- 章16. 操作系统环境
- 章17. 服务器配置
- 章18. 数据库角色和权限
- 章19. 管理数据库
- 章21. 区域
- 章20. 用户认证
- 章22. 日常数据库维护工作
- 章23. 备份与恢复
- 章24. 高可用性与负载均衡
- 章25. 监控数据库的活动
- 章26. 监控磁盘使用情况
- 章27. 可靠性和预写式日志
- 章28. 回归测试
IV. 客户端接口
- Chapter 28. libpq - C 库
- 章29.
- Chapter 30. ecpg - 在 C 里嵌入 SQL
- Chapter 31. 信息模式
- 31.2. 数据类型
- 31.3. informationschemacatalog_name
- 31.4. applicable_roles
- 31.5. check_constraints
- 31.6. columndomainusage
- 31.7. column_privileges
- 31.8. columnudtusage
- 31.9. columns
- 31.10. constraintcolumnusage
- 31.11. constrainttableusage
- 31.12. datatypeprivileges
- 31.13. domain_constraints
- 31.14. domainudtusage
- 31.15. domains
- 31.16. element_types
- 31.17. enabled_roles
- 31.18. keycolumnusage
- 31.20. referential_constraints
- 31.21. rolecolumngrants
- 31.22. roleroutinegrants
- 31.23. roletablegrants
- 31.24. roleusagegrants
- 31.25. routine_privileges
- 31.26. routines
- 31.27. schemata
- 31.28. sql_features
- 31.29. sqlimplementationinfo
- 31.30. sql_languages
- 31.31. sql_packages
- 31.32. sql_sizing
- 31.33. sqlsizingprofiles
- 31.34. table_constraints
- 31.35. table_privileges
- 31.36. tables
- 31.37. triggers
- 31.38. usage_privileges
- 31.39. viewcolumnusage
- 31.40. viewtableusage
- 31.41. views
V. 服务器端编程
- 章33. 扩展 SQL
- 章34. 触发器
- 章35. 规则系统
- 章36. 过程语言
- 章37. PL/pgSQL - SQL 过程语言
- 章38. PL/Tcl - Tcl 过程语言
- 章39. PL/Perl - Perl 过程语言
- 章40. PL/Python - Python 过程语言
- 章41. 服务器编程接口
VI. 参考手册
- I. SQL 命令
- ABORT
- ALTER AGGREGATE
- ALTER CONVERSION
- ALTER DATABASE
- ALTER DOMAIN
- ALTER FUNCTION
- ALTER GROUP
- ALTER INDEX
- ALTER LANGUAGE
- ALTER OPERATOR
- ALTER OPERATOR CLASS
- ALTER ROLE
- ALTER SCHEMA
- ALTER SEQUENCE
- ALTER TABLE
- ALTER TABLESPACE
- ALTER TRIGGER
- ALTER TYPE
- ALTER USER
- ANALYZE
- BEGIN
- CHECKPOINT
- CLOSE
- CLUSTER
- COMMENT
- COMMIT PREPARED
- COMMIT
- COPY
- CREATE AGGREGATE
- CREATE CAST
- CREATE CONSTRAINT TRIGGER
- CREATE CONVERSION
- CREATE DATABASE
- CREATE DOMAIN
- CREATE FUNCTION
- CREATE GROUP
- CREATE INDEX
- CREATE LANGUAGE
- CREATE OPERATOR CLASS
- CREATE OPERATOR
- CREATE ROLE
- CREATE RULE
- CREATE SCHEMA
- CREATE SEQUENCE
- CREATE TABLE
- CREATE TABLE AS
- CREATE TABLESPACE
- CREATE TRIGGER
- CREATE TYPE
- CREATE USER
- CREATE VIEW
- DEALLOCATE
- DECLARE
- DELETE
- DROP OWNED
- DROP AGGREGATE
- DROP CAST
- DROP CONVERSION
- DROP DATABASE
- DROP DOMAIN
- DROP FUNCTION
- DROP GROUP
- DROP INDEX
- DROP LANGUAGE
- DROP OPERATOR CLASS
- DROP OPERATOR
- DROP ROLE
- DROP RULE
- DROP SCHEMA
- DROP SEQUENCE
- DROP TABLE
- DROP TABLESPACE
- DROP TRIGGER
- DROP TYPE
- DROP USER
- DROP VIEW
- END
- EXECUTE
- EXPLAIN
- FETCH
- GRANT
- INSERT
- LISTEN
- LOAD
- LOCK
- MOVE
- NOTIFY
- PREPARE TRANSACTION
- PREPARE
- REASSIGN OWNED
- REINDEX
- RELEASE SAVEPOINT
- RESET
- REVOKE
- ROLLBACK PREPARED
- ROLLBACK TO SAVEPOINT
- ROLLBACK
- SAVEPOINT
- SELECT
- SELECT INTO
- SET
- SET CONSTRAINTS
- SET ROLE
- SET SESSION AUTHORIZATION
- SET TRANSACTION
- SHOW
- START TRANSACTION
- TRUNCATE
- UNLISTEN
- UPDATE
- VACUUM
- II. PostgreSQL 客户端应用程序
- III. PostgreSQL 服务器应用程序
VII. 内部
- 章42. PostgreSQL 内部概貌
- 章43. 系统表
- 43.1. 概述
- 43.2. pg_aggregate
- 43.3. pg_am
- 43.4. pg_amop
- 43.5. pg_amproc
- 43.6. pg_attrdef
- 43.7. pg_attribute
- 43.8. pg_authid
- 43.9. pgauthmembers
- 43.10. pg_autovacuum
- 43.11. pg_cast
- 43.12. pg_class
- 43.13. pg_constraint
- 43.14. pg_conversion
- 43.15. pg_database
- 43.16. pg_depend
- 43.17. pg_description
- 43.18. pg_index
- 43.19. pg_inherits
- 43.20. pg_language
- 43.21. pg_largeobject
- 43.22. pg_listener
- 43.23. pg_namespace
- 43.24. pg_opclass
- 43.25. pg_operator
- 43.26. pg_pltemplate
- 43.27. pg_proc
- 43.28. pg_rewrite
- 43.29. pg_shdepend
- 43.30. pg_shdescription
- 43.31. pg_statistic
- 43.32. pg_tablespace
- 43.33. pg_trigger
- 43.34. pg_type
- 43.35. 系统视图
- 43.36. pg_cursors
- 43.37. pg_group
- 43.38. pg_indexes
- 43.39. pg_locks
- 43.40. pgpreparedstatements
- 43.41. pgpreparedxacts
- 43.42. pg_roles
- 43.43. pg_rules
- 43.44. pg_settings
- 43.45. pg_shadow
- 43.46. pg_stats
- 43.47. pg_tables
- 43.48. pgtimezoneabbrevs
- 43.49. pgtimezonenames
- 43.50. pg_user
- 43.51. pg_views
- 章44. 前/后端协议
- 章45. PostgreSQL 编码约定
- 章46. 本地语言支持
- 章47. 书写一个过程语言处理器
- 章48. 基因查询优化器
- 章49. 索引访问方法接口定义
- 章50. GiST 索引
- 章51. GIN 索引
- 章52. 数据库物理存储
- 章53. BKI 后端接口
- 章54. 规划器如何使用统计信息
VIII. 附录
14.5. 安装过程
配置
安装过程的第一步就是配置源代码树并选择你喜欢的选项。这个工作是通过运行
configure
脚本实现的,对于缺省安装,你只需要简单地敲入./configure
该脚本将运行一些测试来猜测一些系统相关的变量,并检测操作系统的设置,最后将在编译树中创建一些文件以记录它找到了什么。如果你想保持编译目录的独立,那么你也可以在源代码树之外的其它目录里运行
configure
脚本。缺省设置将编译服务器和应用程序,还有所有只需要 C 编译器的客户端程序和接口。缺省时所有文件都将安装到
/usr/local/pgsql
目录。你可以通过给出下面的一个或多个
configure
命令行选项来自定义编译和安装过程:--prefix=
PREFIX
把所有文件装在
PREFIX
目录下而不是/usr/local/pgsql
里。实际的文件会安装到不同的子目录里;甚至没有一个文件会直接安装到PREFIX
目录里。如果你有特殊需要,你还可以用下面的选项自定义不同子目录的位置。不过,即使你保持缺省设置,也可以在安装之后移动目录(
man
和doc
位置不受影响),此时你可能需要使用configure
的--disable-rpath
选项。还有,你需要告诉操作系统如何找到共享库。--exec-prefix=
EXEC-PREFIX
把体系相关的文件安装到
EXEC-PREFIX
,而不是PREFIX
设置的地方。这样做可以比较方便地在不同主机之间共享体系相关的文件。如果你省略它,那么EXEC-PREFIX
就会被设置为等于PREFIX
并且体系相关和体系无关的文件都会安装到同一目录树下,这也可能是你想要的。--bindir=
DIRECTORY
可执行程序的目录,缺省是
,通常也就是EXEC-PREFIX
/bin/usr/local/pgsql/bin
--datadir=
DIRECTORY
程序需要的只读文件目录。缺省是
。请注意这个目录和存放数据库文件的地方没有任何关系。PREFIX
/share--sysconfdir=
DIRECTORY
配置文件的目录,缺省为
PREFIX
/etc--libdir=
DIRECTORY
库文件和动态装载模块的目录。缺省是
EXEC-PREFIX
/lib--includedir=
DIRECTORY
C 和 C++ 头文件的目录。缺省是
PREFIX
/include--mandir=
DIRECTORY
随着 PostgreSQL 一起带的手册页将安装到这个目录的
man
子目录里。缺省是x
PREFIX
/man--with-docdir=
DIRECTORY
--without-docdir
除"man"以外的文档文件将被安装到这个目录。缺省是
。如果声明了PREFIX
/doc--without-docdir
,那么文档将不会被make install
安装。这是给那些使用特殊方法安装文档的打包脚本使用的。
【注意】为了让 PostgreSQL 能够安装在一些共享的安装位置(比如
/usr/local/include
),同时又不至于和系统其它部分产生名字空间干扰,我们采取了一些步骤。首先,安装脚本会自动给datadir
,sysconfdir
,docdir
后面附加上"/postgresql
"字符串,除非展开的完整路径名已经包含字符串"postgres
"或"pgsql
"。比如,如果你选择/usr/local
作为前缀,那么文档将安装在/usr/local/doc/postgresql
,但如果前缀是/opt/postgres
,那么它将被放到/opt/postgres/doc
。客户接口的公共C头文件安装到了includedir
,并且是名字空间无关的。内部的头文件和服务器头文件都安装到includedir
下的私有目录中去了。参考每种接口的文档获取关于如何得到头文件的信息。最后,如果合适,那么也会在libdir
下创建一个私有的子目录,用于动态装载模块。--with-includes=
DIRECTORIES
DIRECTORIES
是一系列冒号分隔的目录,这些目录将被加入编译器的头文件搜索列表中。如果你有一些可选的包(比如 GNU Readline)安装在非标准位置,你就必须使用这个选项,以及可能还有相应的--with-libraries
选项。例子:
--with-includes=/opt/gnu/include:/usr/sup/include
--with-libraries=
DIRECTORIES
DIRECTORIES
是一系列冒号分隔的目录,这些目录是用于查找库文件的。如果你有一些包安装在非标准位置,你可能就需要使用这个选项(以及对应的--with-includes
选项)。例子:
--with-libraries=/opt/gnu/lib:/usr/sup/lib
--enable-nls[=
LANGUAGES
]打开本地语言支持(NLS),也就是以非英文显示程序信息的能力。
LANGUAGES
是一个空格分隔的语言代码列表,标识你想支持的语言。比如--enable-nls='de fr'
。你提供的列表和实际支持的列表之间的交集会自动计算出来。如果你没有声明一个列表,那么就安装所有可用的翻译。要使用这个选项,你需要一个 Gettext API 的实现。见上文。
--with-pgport=
NUMBER
NUMBER
为服务器和客户端的缺省端口(缺省是 5432)。这个端口可以在以后设置,不过如果你在这里声明,那么服务器和客户端将有相同的编译好了的缺省值。这样会方便些。通常选取一个非缺省值的好理由是你企图在同一台机器上运行多个 PostgreSQL 服务器。--with-perl
编译 PL/Perl 服务器端编程语言。
--with-python
编译 PL/Python 服务器端编程语言。
--with-tcl
编译 PL/Tcl 服务器端编程语言。
--with-tclconfig=
DIRECTORY
Tcl 安装的
tclConfig.sh
文件所在目录,它里面包含编译 Tcl 模块的配置信息。configure 通常会自动在约定俗成的位置找到这些文件,但是如果你需要一个不同版本的 Tcl ,你也可以声明不同的目录。--with-krb5
编译支持 Kerberos 5 认证的东西。在许多系统上,Kerberos 系统没有安装在缺省的搜索目录下(比如
/usr/include
,/usr/lib
),所以你必须使用附加的--with-includes
和--with-libraries
选项。configure
在继续配置之前将检查所需要的头文件和库,以确保 Kerberos 是充分可用的。--with-krb-srvnam=
NAME
缺省的 Kerberos 服务主的名称。缺省是
postgres
。通常没有理由改变这个值。--with-openssl
编译支持SSL(加密的)连接。这个选项需要安装 OpenSSL 包。
configure
将在安装之前检查所需要的头文件和库文件以确信 OpenSSL 安装是充分可用的。--with-pam
编译 PAM(可插拔认证模块)支持。
--with-ldap
编译 LDAP(轻量级目录访问协议)支持。用于认证和查找连接参数(参见 节29.15和节20.2.5以获取更多信息)。在 Unix 上,这需要 OpenLDAP 包的支持。
configure
将会检查所需的头文件和库以确保 OpenLDAP 的安装是充分可用的。在 Windows 上,将使用缺省的 WinLDAP 库。--without-readline
避免使用 Readline 与 libedit 库。这样就关闭了 psql 里的命令行编辑和历史,因此我们不建议这么做。
--with-libedit-preferred
优先使用 libedit 库而不是 Readline 库。该选项仅在同时安装了这两个库的情况下才有意义。缺省使用 Readline 库。
--with-bonjour
编译 Bonjour 支持。这要求操作系统支持 Bonjour 。在 Mac OS X 上建议使用。
--enable-integer-datetimes
使用 64 位的整数存储时间和间隔,而不是用缺省的浮点数存储。这样做限制了数值可以表达的范围,但是保证了整个范围里的毫秒数的精度(参阅节8.5获取更多信息)。请注意整数时间的代码比浮点数时间的代码要新,我们也会偶尔发现里面有毛病。
--disable-spinlocks
允许在 PostgreSQL 没有该平台的 CPU 自旋锁支持的情况下编译成功。缺乏自旋锁的支持将导致性能恶化;因此,只有在编译过程退出,并且告诉你说该平台缺乏自旋锁支持的时候才使用这个选项。如果在你的平台上需要这个选项才能编译 PostgreSQL ,请向 PostgreSQL 开发者报告这个问题。
--enable-thread-safety
令客户端库是线程安全的。这样就允许在 libpq 和 ECPG 程序里的并发线程安全地控制他们私有的连接句柄。这个选项要求操作系统上有足够的线程支持。
--without-zlib
避免使用 Zlib 库。这样就关闭了 pg_dump 和 pg_restore 里面的压缩支持。这个选项只适用于那些没有这个库的罕见的系统。
--enable-debug
把所有程序和库以带有调试符号的方式编译。这意味着你可以通过一个调试器运行程序来分析问题。这样做显著增大了最后安装的可执行文件的大小,并且在非 GCC 的编译器上,这么做通常还要关闭编译器优化,导致速度的下降。但是,如果有这些符号表的话,就可以非常有效地帮助定位可能发生问题的位置。目前,我们只是在你使用 GCC 的情况下才建议在生产安装中使用这个选项。但是如果你正在进行开发工作,或者正在使用 beta 版本,那么你就总应该打开它。
--enable-cassert
打开在服务器中的 assertion 检查,它会检查许多"不可能发生"的条件。它对于代码开发的用途而言是无价之宝,不过这些测试稍微地减慢了一些速度。并且,打开这个测试不会提高系统的稳定性!这些断言检查并不是按照错误的严重性分类的,因此一些相对无害的小虫子也可能导致服务器重启 (只要它触发了一次断言失败)。目前,我们不推荐在生产环境中使用这个选项,但是如果你在做开发或者在使用 beta 版本的时候应该打开它。
--enable-depend
打开自动倚赖性跟踪。如果打开这个选项,那么 makefile 文件将设置为在任何头文件被修改的时候都将重新编译所有受影响的目标文件。如果你在做开发的工作,那么这个选项很有用,但是如果你只是想编译一次并且安装,那么这就是浪费时间。目前,这个选项只有在你使用 GCC 的时候才管用。
--enable-dtrace
打开 DTrace 支持,仅在 Solaris 平台上可用。因为
dtrace
通常安装在/usr/sbin
中且该目录一般不在搜索路经中,所以常常需要使用DTRACE
和DTRACEFLAGS
环境变量指定dtrace
程序的位置。要包含 64 位 DTrace 支持,需要指定
DTRACEFLAGS="-64"
,比如,在使用 GCC 编译的时候:./configure CC='gcc -m64' --enable-dtrace DTRACEFLAGS='-64' ...
在使用 Sun 编译器的时候:
./configure CC='/opt/SUNWspro/bin/cc -xtarget=native64' --enable-dtrace DTRACEFLAGS='-64' ...
如果你喜欢使用不同于
configure
找出来的 C 编译器,可以将环境变量CC
设置为你选择的程序。缺省时,configure
将选择gcc
(只要可用),或者是该平台的缺省(通常是cc
)类似地,你可以用CFLAGS
覆盖缺省编译器标志。你可以在
configure
命令行上声明环境变量,比如:./configure CC=/opt/bin/gcc CFLAGS='-O2 -pipe'
下面是可用的环境变量列表:
CC
C 编译器命令
CFLAGS
C 编译器选项
CPP
C 预处理器
CPPFLAGS
C 预处理器选项
DTRACE
dtrace
程序的位置DTRACEFLAGS
传递给
dtrace
程序的选项LDFLAGS
连接器选项
LDFLAGS_SL
共享库上的连接器选项
MSGFMT
msgfmt
程序的位置PERL
Perl 解释器的完整路径。用于确定编译 PL/Perl 的依赖关系。
PYTHON
Python 解释器的完整路径。用于确定编译 PL/Python 的依赖关系。
TCLSH
Tcl 解释器的完整路径。用于确定编译 PL/Tcl 的依赖关系。
YACC
Yacc 程序(如果使用Bison则是
bison -y
)
编译
要开始编译,敲入(一定要记得用 GNU make):
gmake
依硬件不同,编译过程可能需要 5-30 分钟。显示的最后一行应该是
All of PostgreSQL is successfully made. Ready to install.
回归测试
如果你想在安装文件前测试新编译的服务器,那么你可以在这个时候运行回归测试。回归测试是一个用于验证 PostgreSQL 在系统上是否按照开发人员设想的那样运行的测试套件。敲入
gmake check
这条命令在 root 里无法使用;请在非特权用户下运行该命令。章28包含关于如何解释测试结果的详细信息。你可以在以后的任何时间通过执行这条命令来运行这个测试。
安装
【注意】如果你正在升级一套现有的系统并且准备把新文件覆盖在旧文件上面,那么要记得在覆盖之前备份数据并关闭旧服务器,像上面节14.4里面解释的那样。
要安装 PostgreSQL ,键入
gmake install
这条命令将把文件安装到在 step 1 声明的目录里面去。确保你对那个目录有足够的权限。通常你需要用 root 权限做这一步。或者你也可以事先创建目标目录并且分派合适的权限。
你可以使用
gmake install-strip
代替gmake install
在安装可执行文件和库文件时把它们的调试信息抽取掉。这样将节约一些空间。如果你编译时带着调试支持,那么抽取将有效地删除调试支持,因此我们应该只是在不再需要调试的时候做这些事情。install-strip
力图做一些合理的事情来节约空间,但是它并不知道如何从可执行文件中抽取每个不需要的字节,因此,如果你希望节约所有可能节约的磁盘空间,那么你可能需要手工做些处理。标准的安装只提供所有开发客户端应用的头文件和服务器端的程序开发,比如用 C 写客户函数或者数据类型的头文件。
【只装客户端】如果你只想装客户应用和接口,那么你可以用下面的命令:
gmake -C src/bin install gmake -C src/include install gmake -C src/interfaces install gmake -C doc install
src/bin
中有一些仅供服务器使用的二进制文件,但是它们都很小。
【在 Windows 上注册 eventlog 】要在该操作系统上注册一个 Windows eventlog 库,在安装完毕之后执行下面的命令:
regsvr32 pgsql_library_directory
/pgevent.dll
这样就创建了一个用于事件查看器的注册表项目。
【卸载】可以使用 gmake uninstall
命令卸载。不过这样不会删除任何创建出来的目录。
【清理】在安装完成以后,你可以通过在源码树里面用命令 gmake clean
删除编译过程文件。这样会保留 configure
程序生成的文件,这样以后你就可以用 gmake
命令重新编译所有东西。要把源码树恢复为发布时的状态,用 gmake distclean
命令。如果你想从同一棵源码树上为多个不同平台编译,你就一定要运行这条命令并且为每个平台重新配置。另外,在每种系统上使用一套独立的编译树,这样源代码树就可以保留不被更改。
如果你执行了一次编译,然后发现你的配置选项是错误的,或者你修改了任何 configure
所探测的东西(比如升级了软件),那么在重新配置和编译之前运行一下 gmake distclean
是个好习惯。如果不做这个事情,你修改的配置选项可能无法传播到所有需要变化的地方。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论