↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 15 / 14
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
历史版本。 PostgreSQL 7.1 已结束支持。 请参阅 当前版本手册.

1.5. 安装过程 #

  1. 配置

    安装流程的第一步是为你的系统配置源码树并选择所需选项。这通过运行configure脚本来完成。默认安装只需输入

    ./configure

    此脚本会运行一系列测试来猜测各种系统相关变量的值,检测你的操作系统的一些特性,最后在构建树中创建若干文件记录其发现。

    默认配置将构建服务器和实用程序,以及所有只需要 C 编译器的客户端应用程序和接口。默认情况下,所有文件都会安装到 /usr/local/pgsql 之下。

    可以通过向configure提供下列一个或多个命令行选项来自定义构建和安装过程:

    --prefix=PREFIX

    把所有文件安装在目录PREFIX而不是/usr/local/pgsql之下。实际文件会安装到各个子目录中;任何文件都不会直接安装到PREFIX目录本身。

    如果你有特殊需求,还可以用下面的选项自定义各个子目录。

    --exec-prefix=EXEC-PREFIX

    可以把体系结构相关的文件安装在不同于PREFIX所设置的另一个前缀EXEC-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。

    --docdir=DIRECTORY

    文档文件(“man” 页除外)将安装到此目录。默认为 PREFIX/doc。

    --mandir=DIRECTORY

    PostgreSQL附带的手册页将安装在该目录下各自的manx子目录中。默认值为PREFIX/man。

    注意

    为减少对共享安装位置(例如 /usr/local/include)的污染,除非完全展开的目录名已经包含字符串 “postgres” 或 “pgsql”,否则字符串 “/postgresql” 会自动追加到 datadir、sysconfdir、includedir 和 docdir。例如,如果你选择 /usr/local 作为前缀,C 头文件将安装在 /usr/local/include/postgresql;但如果前缀是 /opt/postgres,则会安装在 /opt/postgres/include。

    --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-locale

    启用区域设置支持。区域设置支持会带来性能损失,但如果你不在英语环境中,你很可能需要它。

    --enable-recode

    启用单字节字符集 recode 支持。关于此特性,参见第 5.3 节。

    --enable-multibyte

    允许使用多字节字符编码。这主要是为日语、韩语和中文之类的语言准备的。详情请阅读第 5.2 节。

    --with-pgport=NUMBER

    把 NUMBER 设为服务器和客户端的默认端口号。默认值为 5432。端口以后总是可以更改的,但如果你在此处指定,服务器和客户端就会内置相同的默认值,这会非常方便。

    --with-CXX

    构建 C++ 接口库。

    --with-perl

    构建 Perl 接口模块。Perl 接口将安装在 Perl 模块的惯常位置(通常在 /usr/lib/perl 之下),因此你必须有 root 权限才能执行安装步骤(见步骤 4)。使用此选项需要已安装 Perl 5。

    --with-python

    构建 Python 接口模块。你需要 root 权限才能把 Python 模块安装到其默认位置(/usr/lib/pythonx.y)。要使用此选项,你必须已安装 Python,而且你的系统需要支持共享库。如果你想构建一个新的完整解释器二进制,就得手动做了。

    --with-tcl

    构建需要 Tcl/Tk 的组件,即 libpgtcl、pgtclsh、pgtksh、pgaccess 和 PL/Tcl。但关于 --without-tk 请见下文。

    --without-tk

    如果你同时指定 --with-tcl 和此选项,需要 Tk 的程序(即 pgtksh 和 pgaccess)将被排除。

    --with-tclconfig=DIRECTORY
    --with-tkconfig=DIRECTORY

    Tcl/Tk 会安装文件 tclConfig.sh 和 tkConfig.sh,其中包含构建与 Tcl 或 Tk 接口的模块所需的某些配置信息。这些文件通常会在其惯常位置被自动找到,但如果你想使用其他版本的 Tcl 或 Tk,可以指定到哪个目录寻找它们。

    --enable-odbc

    构建 ODBC 驱动程序包。

    --with-odbcinst=DIRECTORY

    指定 ODBC 驱动到哪里找它的 odbcinst.ini 配置文件。默认为 /usr/local/pgsql/etc 或你为 --sysconfdir 指定的任何值。一个默认文件会被安装到那里。如果你打算在多个 ODBC 驱动之间共享 odbcinst.ini 文件,就可能需要使用此选项。

    --with-krb4=DIRECTORY
    --with-krb5=DIRECTORY

    构建时加入对 Kerberos 认证的支持。你可以使用 Kerberos 版本 4 或 5,但不能两者都用。DIRECTORY 参数指定 Kerberos 安装的根目录;默认假定为 /usr/athena。如果相关的头文件和库不在一个共同的父目录之下,就必须在此选项之外再使用 --with-includes 和 --with-libraries 选项。反之,如果所需文件位于默认会搜索的位置(例如 /usr/lib),则可以省略该参数。

    configure 会检查所需的头文件和库,以确保你的 Kerberos 安装满足要求,然后才继续。

    --with-krb-srvnam=NAME

    Kerberos 服务主体的名称。默认为 “postgres”。大概没有理由更改它。

    --with-openssl=DIRECTORY

    构建时加入对 SSL(加密)连接的支持。这要求已安装 OpenSSL 软件包。DIRECTORY 参数指定 OpenSSL 安装的根目录;默认为 /usr/local/ssl。

    configure 会检查所需的头文件和库,以确保你的 OpenSSL 安装满足要求,然后才继续。

    --with-java

    构建 JDBC 驱动及相关的 Java 软件包。此选项要求已安装 Ant(当然还需要 JDK)。更多信息参见程序员指南中的 JDBC 驱动文档。

    --enable-syslog

    使 PostgreSQL 服务器可以使用 syslog 日志设施。(使用此选项并不意味着你必须用 syslog 记录日志,也不意味着默认就会这样做,它只是使得运行时可以打开这个选项。)

    --enable-debug

    编译所有程序和库时带上调试符号。这意味着你可以让程序在调试器中运行来分析问题。这会显著增大安装后的可执行文件的体积,而且在非 gcc 编译器上通常会同时关闭编译器优化,导致变慢。不过,带着这些符号对处理可能出现的任何问题都极有帮助。目前,此选项对生产安装来说价值有限,但如果你在做开发工作或运行 beta 版本,就应该打开它。

    --enable-cassert

    在服务器中启用断言检查,它们会测试许多“不可能发生”的情况。这对代码开发非常有价值,但这些测试会略微拖慢速度。而且,打开这些测试不一定能增强你服务器的稳定性!断言检查没有按严重程度分类,因此一个相对无害的 bug 一旦触发断言失败,仍会导致 postmaster 重启。目前不推荐在生产环境中使用此选项,但做开发工作或运行 beta 版本时应该打开它。

    如果你希望使用与 configure 所选不同的 C 或 C++ 编译器,可以分别将环境变量 CC 和 CXX 设置为你选择的程序。类似地,你可以用 CFLAGS 和 CXXFLAGS 变量覆盖默认的编译器标志。例如:

    env CC=/opt/bin/gcc CFLAGS='-02 -pipe' ./configure

  2. 构建

    要开始构建,输入

    gmake

    (记住要使用 GNU make。)构建过程可能需要 5 分钟到半小时不等。最后显示的一行应该是

    All of PostgreSQL is successfully made. Ready to install.

  3. 回归测试

    如果你想在安装之前测试新构建的服务器,可以在此时运行回归测试。回归测试是一套测试用例,用于验证 PostgreSQL 在你的机器上按开发者预期的方式运行。输入

    gmake check

    由于错误消息措辞或浮点结果方面的差异,可能有些测试会失败。第 12 章包含关于解释测试结果的详细信息。你可以在之后任何时候通过执行相同的命令重复此测试。

  4. 安装文件

    注意

    如果你是在升级现有系统,并且要把新文件安装到旧文件之上,那么此时你应该已经按上文第 1.4 节的说明备份了数据并关闭了旧服务器。

    要安装 PostgreSQL,输入

    gmake install

    这会把文件安装到步骤 1中指定的目录中。请确保你有写入该区域的适当权限。通常你需要以 root 身份执行这一步。或者,你也可以提前创建目标目录,并安排授予适当的权限。

    如果你构建了 Perl 或 Python 接口,而在执行上述命令时你不是 root 用户,那么安装的这一部分很可能失败了。这种情况下你应当成为 root 用户然后执行

    gmake -C src/interfaces/perl5 install
    gmake -C src/interfaces/python install

    由于 Perl 构建环境的一个怪癖,第一条命令实际上会重新构建整个接口然后再安装它。这没有危害,只是不常见。如果你没有超级用户权限,那就只能自己想办法了:你仍然可以拿走所需的文件并把它们放到 Perl 或 Python 能找到的其他目录中,但具体怎么做就留作练习了。

    标准安装只会安装客户端应用开发所需的头文件。如果你打算做任何服务器端程序开发(例如用 C 编写的自定义函数或数据类型),那么你可能想把整个 PostgreSQL include 树安装到你的目标 include 目录中。为此,输入

    gmake install-all-headers

    这会让安装占用增加一两 MB,而且只在你不打算保留整个源码树供参考时才有用。(如果保留了,构建服务器端软件时直接用源码的 include 目录即可。)

    仅安装客户端.  如果你只想安装客户端应用和接口库,可以使用这些命令:

    gmake -C src/bin install
    gmake -C src/interfaces install
    gmake -C doc install

    要撤销安装,使用命令 gmake uninstall。但是,这不会删除 Perl 和 Python 接口,也不会删除任何目录。

安装之后,你可以用命令 gmake clean 从源码树中删除构建出来的文件以腾出空间。这会保留 configure 程序所做的选择,这样你以后还能用 gmake 重新构建一切。要把源码树重置为分发时的状态,使用 gmake distclean。如果你打算从同一个源码树为多个平台构建,就必须为每次构建执行此操作并重新配置。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.