9.1第十五章

From PostgreSQL wiki
Jump to navigationJump to search

第十五章 从源码安装

目录

15.1 简版

15.2 要求

15.3 获得源码

15.4 安装步骤

15.5 安装后设置

15.5.1 共享库

15.5.2 环境变量

15.6 支持平台

15.7 平台的详细说明

15.7.1 AIX

15.7.2 Cygwin

15.7.3 HP-UX

15.7.4 IRIX

15.7.5 MinGW/Native Windows

15.7.6 SCO OpenServer and SCO UnixWare

15.7.7 Solaris

本章描述用源码包来安装PostgreSQL(如果您正安装一个已经打包好的包,例如RPM或Debian包,请忽略本章,您只需阅读相应包的说明。)

15.1 简版

./configure

gmake

su

gmake install

adduser postgres

mkdir /usr/local/pgsql/data

chown postgres /usr/local/pgsql/data

su - postgres

/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &

/usr/local/pgsql/bin/createdb test

/usr/local/pgsql/bin/psql test

完整版本的安装在本章的其余部分。

15.2 要求

一般而言,一个现代的Unix兼容平台应该能够运行PostgreSQL。下面的15.6节列出了在发行时已经接受了专门测试的平台,在包的子目录doc下有一些针对专门平台的常见问题文件,在遇到问题时您也许希望访问它们。

下面的软件包是创建PostgreSQL所必须的。

• 需要GNU make 版本3.80或更高版本,其他的make程序或更老版本没用。GNU make通常以名gmake被安装,该文件也将用该名字提及它。(在一些系统中,GNU make是以make为名字的默认工具。)要测试GNU make请键入:

gmake –version

• 您需要安装一个ISO/ANSI C 的编译器(至少是C89可兼容的)。我们推荐使用最近版本的gcc,但是众所周知的是可以使用来自不同厂商的许多编译器来编译PostgreSQL。

• 除了gzip和bzip2,还要求用tar来解压源码包。

• 默认使用GNU Readline库,它允许psql记住每个您键入的命令,并允许您使用上下键来记起和编辑之前的命令。这个非常有用,我们强烈推荐。如果您不想使用它,那么您必须在configure中指明--without-readline选项,作为选择,您可以常使用BSD-licensed libedit库,它最初在NetBSD上发布。Libedit库是和GNU Readline相兼容的,并且在没有找到libreadline时或当在configure中使用了--with-libedit-preferred选项使用它。如果您使用一个基于包的Linux发布,请注意当在您的分布包里它们是分开时您需要readline和readline-devel包。

• 默认使用zlib压缩库,如果您不想使用它,那么您必须在cofigure中标注--without-zlib选项。使用了该选项会阻止在pg_dump 和 pg_restore中压缩文档。

下面的包是可选的,它们在默认配置中不需要,但是当某些编译选项可用时必须安装,如下面解释所示:

建立服务器程序语言PL/Perl您需要一个完整的Perl安装,包括libperl库和头文件。因为PL/Perl是个共享库,libperl库在大多数平台上也必须是共享库。在最近的Perl版本中这个好象是默认的,但是在早先版本不是,并且在任何情况下,这都由在您位置安装的人选择。如果您打算不仅仅是附带使用PL/Perl,您应该确信Perl安装时usemultiplicity选项可用(perl-V会显示是否是那种情况)。

如果您没有共享库但是想需要一个,在建立PostgreSQL时会出现像这样一条信息来指出实际情况:

      • Cannot build PL/Perl because libperl is not a shared library.
      • You might have to rebuild your Perl installation.Refer to
      • the documentation for details.

(如果您没有看到上面屏幕上的输出,您只是注意到PL/Perl库对象,plperl.so或类似的,不会被安装。)如果您看到这个,您必须手动重建和安装Perl来能够建立PL/Perl。在为Perl配置过程中,请求一个共享库。

建立PL/Python服务器程序语言,您需要一个有头文件和distutils模块的Python安装。




15.3 获得源码

通过匿名FTP ftp://ftp.postgresql.org/pub/source/v9.1devel/postgresql-9.1devel.tar.gz 您可以获得PostgreSQL9.1devel源码,关于其他选项的下载可以在我们的网站 http://www.postgresql.org/download/ 中找到。获得文件之后,将其解压

gunzip postgresql-9.1devel.tar.gz

tar xf postgresql-9.1devel.tar

这样会在放置PostgreSQL源码的当前目录下创建一个postgresql-9.1devel目录,之后切换到该目录继续完成其他的安装程序。 您也可以直接从版本控制储藏室获得该源码,参见附录H。

15.4 安装步骤

1. 配置

安装步骤的第一步就是为您系统配置源码树并选择您想要的选项,通过运行configure脚本可以完成,对于默认安装只需简单键入:

./configure

该脚本会运行一些测试来测量各类系统的依赖变量并发现您操作系统的任何特殊设置,最后会在编译树下生成一些文件来记录它的发现。如果您想将编译目录分开,您也可以不在源码树下运行configure。该步骤也叫作VPATH编译,下面给出如何操作:

mkdir build_dir

cd build_dir

/path/to/source/tree/configure [options go here]

gmake

默认配置会创建服务器和应用,还有只需要C编译器的客户端应用接口。所有文件都将被默认安装在

/usr/local/pgsql.

您可以通过对configure应用下面命令行选项中的一项或多项来定作编译和安装方法:

--prefix=PREFIX

将所有文件安装到目录PREFIX中,而不是/usr/local/pgsql。实际文件将被安装到许多子目录中,没有文件将永远被直接安装到PREFIX目录中。 如果您有特殊需求,您也可以用下面的选项来定作个别的子目录。然而如果您让它们保留默认值,则安装可重定位,也就是说在安装之后您可以删除这些目录(man和doc目录不会受这个的影响)。

对于可重定位安装,您可能想要使用configure's --disable-rpath选项,同样您需要告诉操作系统如何找到共享库。

--exec-prefix=EXEC-PREFIX

您可以将于体系相关的文件安装在不同的prefix中,EXEC-PREFIX,而不是PREFIX所设置的。这样有助于在用户组之间共享体系不相关的文件。如 果您忽略了这个,则EXEC-PREFIX将设置成与PREFIX一致的路径,并且与体系相关和不相关的文件都将被安装到同一个目录树想,这也许是您想要的。

--bindir=DIRECTORY

为可执行程序制定目录,默认目录是EXEC-PREFIX/bin,通常也指/usr/local/pgsal/bin

--sysconfdir=DIRECTORY

为许多配置文件设定目录,默认是PREFIX/etc。

--libdir=DIRECTORY

安装库文件和动态可装载组件目录,默认是EXEC-PREFIX/lib。

--includedir=DIRECTORY

安装C和C++头文件目录,默认是/PREFIX/include

--datarootdir=DIRECTORY

为许多只读数据文件类型设置根目录,这为下面选项的一些设置默认值,默认是/PREFIX/share。

--datadir=DIRECTORY

安装程序的只读数据文件,默认是DATAROOTDIR,注意它和您数据库文件放在哪里没有任何关系。

--localedir=DIRECTORY

安装当前数据,尤其是信息转化目录文件,默认是DATAROOTDIR/locale

--mandir=DIRECTORY

跟随PostgreSQL的man pages,在它们各自的manx子目录中,默认是DATAROOTDIR/man

--docdir=DIRECTORY

材料文件根目录,除了man pages。这只为下面选项设置了默认值,该选项的默认目录是DATAROOTDIR/doc/postgresql.

--htmldir=DIRECTORY

PostgreSQL的HTML格式的文件,默认是DATAROOTDIR.

Note: Care has been taken to make it possible to install PostgreSQL into shared installation locations (such as /usr/local/include) without interfering with the namespace of the rest of the system. First, the string "/postgresql" is automatically appended to datadir, sysconfdir, and docdir, unless the fully expanded directory name already contains the string "postgres" or "pgsql". For example, if you choose /usr/local as prefix, the documentation will be installed in /usr/local/doc/postgresql, but if the prefix is /opt/postgres, then it will be in /opt/postgres/doc. The public C header files of the client interfaces are installed into includedir and are namespace-clean. The internal header files and the server header files are installed into private directories under includedir. See the documentation of each interface for information about how to access its header files. Finally, a private subdirectory will also be created, if appropriate, under libdir for dynamically loadable modules.

注意:将PostgreSQL安装到共享安装位置(例如/usr/local/include)必须小心.首先,/postgresql被自动加到datadir,sysconfdir和docdir

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

使本地语言可用,也就是用除了英语外的语言来显示程序信息,LANGUAGES是一个可选的空格分开的语言代码列表,这些语言是您想要支持的。例如 --enablenls='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模块所需的配置信息,该文件通常可以在一个众所周知的位置 被自动找到,但是如果您想使用不同的Tcl版本,您可以指定寻找它的目录。

--with-gssapi

为GSSAPI鉴定建立支持,在许多系统中,GSSAPI(通常是Kerberos安装的一部分)系统不会安装在系统默认搜索的一个位置(例如,/usr/include,/usr/lib),所以您除了使用该选项还必须使用选项--with-includes 和 --with-libraries。为了确保您的GSSAPI在运行之前安装充分,configure将会核对所需的头文件和库。

--with-krb5

为Kerberos 5鉴定建立支持,在许多系统中,Kerbreos系统不会安装在系统默认搜索的一个位置(例如,/usr/include,/usr/lib),所以您除了使用该选项还必须使用选项--with-includes 和 --with-libraries。为了确保您的Kerberos在运行之前安装充分,configure将会核对所需的头文件和库。

--with-krb-srvnam=NAME

Kerberos服务主的默认名字(通常也被GSSAPI使用),默认为postgres。除非您有个Windows环境,通常没有理由去更改它,因为在那种环境下,它必须设置为高级的POSTGRES。

--with-openssl

为SSL连接建立支持,它要求安装OpenSSL包,为了确保您的OpenSSL在运行之前安装充分,configure将会核对所需的头文件和库。

--with-pam

建立PAM支持(可插式认证模块)

--with-ldap

为认证和连接参数查阅建立LDAP支持(参考31.16节和19.3.8节)。在Unix上,要求安装OpenLDAP包,在Windows上,默认使用WinLDAP库。为了确保您的OpenLDAP在运行之前安装充分,configure将会核对所需的头文件和库。

--without-readline

阻止使用Readline库(和libedit),该选项将关闭在psql中编辑命令行和历史命令,所以我们不建议使用该选项。

--with-libedit-preferred

帮助使用BSD-licensed libedit库而不是GPL-licensed Readline,该选项只有在您安装了两个库才有作用,在那种情况下默认使用Readline。

--with-bonjour

建立Bonjour支持,要求您操作系统支持Bonjour,在MacOSX上我们建议使用。

--with-ossp-uuid

在编译F.45节模块时使用PSSP UUID,库提供函数来生成UUIDs。

--with-libxml

建立libxml(支持SQL/XML)。要求使用Libxml版本2.6.23或更高版本,Libxml安装一个xm12-config程序,它可以用来发现所需编译和链接选项。若找到了它,PostgreSQL将会自动使用。想在一个特殊的位置指定libxml安装,您或者设置环境变量XML2_CONFIG来指向属于该安装的xml2_config程序,或者使用选项--with-includes 和 --with-libraries.

--with-libxslt

在编译F.47模块时使用libxslt。Xml2依靠该库来实行XSL和XML间的转换

--disable-integer-datetimes

不使用64位整型储存时间和间隔,反而使用浮点型数字来存储时间。PostgreSQL发行版8.4之前的版本默认使用浮点数字存储时间,但是现在不使用了,因为它不支持时间步长值全范围的微秒精度。然而,基于整型的时间存储需要64位整型类型。因此在没有这样类型可用或为了和之前版本的应用相兼容时可以使用该选项。参考8.5节获得更多信息。

--disable-float4-byval


Disable passing float4 values "by value", causing them to be passed "by reference" instead. This option costs performance, but may be needed for compatibility with old user-defined functions that are written in C and use the "version 0" calling convention. A better long-term solution is to update any such functions to use the "version 1" calling convention.

--disable-float8-byval

Disable passing float8 values "by value", causing them to be passed "by reference" instead. This option costs performance, but may be needed for compatibility with old user-defined functions that are written in C and use the "version 0" calling convention. A better long-term solution is to update any such functions to use the "version 1" calling convention. Note that this option affects not only float8, but also int8 and some related types such as timestamp. On 32-bit platforms, --disable-float8-byval is the default and it is not allowed to select --enable-float8-byval.

--with-segsize=SEGSIZE

Set the segment size, in gigabytes. Large tables are divided into multiple operatingsystem files, each of size equal to the segment size. This avoids problems with file size limits that exist on many platforms. The default segment size, 1 gigabyte, is safe on all supported platforms. If your operating system has "largefile" support (which most do, nowadays), you can use a larger segment size. This can be helpful to reduce the number of file descriptors consumed when working with very large tables. But be careful not to select a value larger than is supported by your platform and the file systems you intend to use. Other tools you might wish to use, such as tar, could also set limits on the usable file size. It is recommended, though not absolutely required, that this value be a power of 2. Note that changing this value requires an initdb.

--with-blocksize=BLOCKSIZE

Set the block size, in kilobytes. This is the unit of storage and I/O within tables. The default, 8 kilobytes, is suitable for most situations; but other values may be useful in special cases. The value must be a power of 2 between 1 and 32 (kilobytes). Note that changing this value requires an initdb.

--with-wal-segsize=SEGSIZE

Set the WAL segment size, in megabytes. This is the size of each individual file in the WAL log. It may be useful to adjust this size to control the granularity of WAL log shipping. The default size is 16 megabytes. The value must be a power of 2 between 1 and 64 (megabytes). Note that changing this value requires an initdb.

--with-wal-blocksize=BLOCKSIZE

Set the WAL block size, in kilobytes. This is the unit of storage and I/O within the WAL log. The default, 8 kilobytes, is suitable for most situations; but other values may be useful in special cases. The value must be a power of 2 between 1 and 64 (kilobytes). Note that changing this value requires an initdb.

--disable-spinlocks

Allow the build to succeed even if PostgreSQL has no CPU spinlock support for the platform. The lack of spinlock support will result in poor performance; therefore, this option should only be used if the build aborts and informs you that the platform lacks spinlock support. If this option is required to build PostgreSQL on your platform, please report the problem to the PostgreSQL developers.

--disable-thread-safety

Disable the thread-safety of client libraries. This prevents concurrent threads in libpq and ECPG programs from safely controlling their private connection handles.

--with-system-tzdata=DIRECTORY

PostgreSQL includes its own time zone database, which it requires for date and time operations. This time zone database is in fact compatible with the "zoneinfo" time zone database provided by many operating systems such as FreeBSD, Linux, and Solaris, so it would be redundant to install it again. When this option is used, the system-supplied time zone database in DIRECTORY is used instead of the one included in the PostgreSQL source distribution. DIRECTORY must be specified as an absolute path. /usr/share/zoneinfo is a likely directory on some operating systems. Note that the installation routine will not detect mismatching or erroneous time zone data. If you use this option, you are advised to run the regression tests to verify that the time zone data you have pointed to works correctly with PostgreSQL. This option is mainly aimed at binary package distributors who know their target operating system well. The main advantage of using this option is that the PostgreSQL package won't need to be upgraded whenever any of the many local daylight-saving time rules change. Another advantage is that PostgreSQL can be cross-compiled more straightforwardly if the time zone database files do not need to be built during the installation.

--without-zlib

阻止使用Zlib库,该选项阻止在pg_dump和pg_restore里压缩文档,该选项只为那些这个库不可用的稀少系统设置。

--enable-debug

用有调试标志形式来编译所有的程序和库,这意味着您可以在调试器下运行程序来分析问题。这就相当地扩大了您安装的可执行程序的大小,并且对于非gcc编译器,它还关闭编译优化器,导致编译减慢。然而,使用调试标志对处理任何可能出现的问题及其有用。目前,如果您使用GCC编译器,我们推荐您使用该选项。但是如果您做开发工作或运行beta版本,您应该一直使用该选项。

--enable-coverage

如果您使用GCC,所有的程序和库都用代码覆盖测试来编译。在运行时,它们在编译目录下生成有代码覆盖的文件。参考30.4节获取更多信息。该选项只在使用GCC和做开发工作时使用。

--enable-profiling

如果使用GCC,所有的程序和库都被编译,以便它们被描绘。一旦备份退出就会生成一个子目录,它包括gmon.out文件。该选项只在使用GCC和做开发工作时使用。

--enable-cassert

在服务器上允许assertion核对,它测试许多不可能发生的情况。对于代码开发目的它是无价的,但是测试能大大地减慢服务器,同样使用该测试不会增强您服务器的稳定性!assertion核对没有严格分类,并且如果遇到一个assertion故障,一个相对无害的故障会导致服务器重启。作为产品使用我们不建议使用该项,但是如果你作开发工作或使用beta版本您应该使用它。

--enable-depend

打开自动依赖追踪,使用该选项,makefiles将被设置以便当头文件更改时所有受影响的目标文件将重编译。如果您在做开发工作是非常有用的,但是如果你只打算编译一次和安装就过分的浪费。目前,改选项只有您使用GCC时才有用。

--enable-dtrace

用支持动态追踪工具DTrace来编译PostgreSQL,参考27.4节获取更多信息。 为了指向dtrace程序,可能要设置环境变量DTRACE。这将非常必要,因为dtrace安装在/usr/bin下,它也许不再路径中。 在环境变量DTRACEFLAGS中您可以为dtrace程序指定其他的命令行选项。在Solaris上,要包含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,如果gcc可用的话configure会默认选择它,另外平台默认(通常是cc)。同样如果需要CFLAGS可变您可能不顾默认编译器标记。 您可以在configure命令行中指定环境变量,例如

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

下面是可以用这种方式设置的有效变量的列表

BISON

Bison 程序

CC

C 编译器

CFLAGS

通过C编译器选项

CPP

C 预处理

CPPFLAGS

通过 C 预处理选项

DTRACE

Dtrace程序的位置

DTRACEFLAGS

通过 dtrace程序选项

FLEX

Flex 程序

LDFLAGS

连接可执行文件或共享库的选项

LDFLAGS_EX

仅连接可执行文件的额外选项

LDFLAGS_SL

仅连接共享库的额外选项

MSGFMT

支持本地语言的msgfmt程序

PERL

Perl注释器的完整路径。它将用来决定编译PL/Perl的管理。

PYTHON

Python注释器的完整路径。它将用来决定编译PL/Python的管理。同样,Python2或3是否在这指定决定了哪种PL/Python语言可用。参考42.1获取更多信息。

TCLSH

Tcl注释器的完整路径。它将用来决定编译PL/Tcl的管理,并且被提交到Tcl脚本中。

XML2_CONFIG

用来查找libxml安装位置的Xml2-config程序

2. 编译

开始编译,键入:

gmake

(记住使用GNU make)根据您的硬件编译要花几分钟的时间,最后一行应该显示

All of PostgreSQL is successful made. Ready to install.

如果您想编译可以编译的所有东西,包括文件(HTML和man pages)和其他模块(contrib),键入:

gmake world

最后一行显示的应该是:

PostgreSQL, contrib and HTML documentation successfully made. Ready to install.

3. 复原测试

如果在安装之前您想测试新编译的服务器,这时您可以运行复原测试。复原测试是一个测试套装,它用来核实PostgreSQL在您机子上按开发商希望的方式运行。键入:

gmake check

(超级用户不使用,以普通用户执行它)30章包含了关于解释测试结果的详细信息,您可以在之后的任何时间用同样的命令重复该测试。

4. 安装文件

注意:如果您在升级一个已存在的系统,一定要阅读17.6节,它有关于升级集群的指导。

安装PostgreSQL键入:

gmake install

它会将文件安装到第一步指定的目录中,请确保您有向该区域写的权利,通常您需要以超级用户完成这一步,或者您可以提前创建一个目标目录,并保证权限允许。

安装文件(HTML和man pages),键入:

gmake install-docs

如果您编译上面的整个东西,键入:

gmake install-world

它也会安装文件。

您可以使用gmake install-strip替代gmake install抽去安装可执行文件和库文件时的调试信息,这样会节省一些空间。如果您编译时采用调试错误,stripping将有效地移除调试错误,所以它应该在debugging不再需要时完成。Install-strip试图节省空间,但是它不知道如何从一个可执行文件中抽去每个不需要的字节,因此如果您想尽可能节省所有硬盘空间,您必须得手动工作。

标准安装提供了所有客户应用开发和服务器程序开发,例如custom 函数或用C写的数据类型,所需的头文件。(PostgreSQL8.0之前的版本,需要一个单独的gmake install-all-headers命令,但是该步骤已经加到了标准的安装中。)

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

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

它创建event viewer使用的注册登入口。

卸载:要取消安装使用命令gmake uninstall。然而,它不会删除任何生成的目录。

清除:安装之后您可以通过从源码树中移除编译文件来释放磁盘空间,使用命令gmake clean。它将保留configure 程序生成的文件,以便您之后可以用gmake重新编译所有东西。要重设源码树到它发布的状态,使用gmake distclean。如果您打算在同个源码树下为多个平台进行编译,您必须使用它并为每个平台重新配置。(作为选择之一,每个平台使用一个独立的编译树,以便可以保留不修改源码树。)

如果您执行编译时发现configure选项有误,或如果您更改configure研究的任何东西(例如软件升级),则在重配置和编译之前执行gmake distclean是个不错的想法。没有执行它时,您在configuration选项中的改变在任何它们所需的地方可能都不会传送。

15.5 安装后设置

15.5.1 共享库

在有共享库的许多系统中,您需要告诉系统如何找到新安装的共享库。在这些系统上没必要,包括:BSD/OS, FreeBSD, HP-UX,IRIX, Linux, NetBSD, OpenBSD, Tru64 UNIX (formerly Digital UNIX), 和Solaris。 在平台之间设置搜寻共享库但是最广泛使用的的方法是像这样设置环境变量LD_LIBRARY_PATH:在Bourne shells(sh,ksh,bash,zsh): LD_LIBRARY_PATH=/usr/local/pgsql/lib export LD_LIBRARY_PATH 或在 csh or tcsh: setenv LD_LIBRARY_PATH /usr/local/pgsql/lib

用您在步骤1设置的任何位置来替代/usr/local/pgsql/lib。您应该将这些命令放到shell启动文件中,像/etc/profile或~/.bash_profile。和该方法相关的许多好的信息可以在 http://xahlee.org/UnixResource_dir/_/ldpath.html 找到。 在许多系统中,有可能更喜欢在编译前设置环境变量LD_RUN_PATH. 在Cygwin,将库文件目录放在PATH中或将.dll文件移到bin目录中。 如果有疑问的话,请参考您系统(也许是ld.so或rld)的手册页。如果之后您看到一条信息:

psql: error in loading shared libraries libpq.so.2.1: cannot open shared object file: No such file or directory

则该步骤是必须的,然后简单地注意下。

如果您是BSD/OS,Linux,或SunOS4系统,您有root权限您可以运行: /sbin/ldconfig /usr/local/pgsql/lib (或相同的目录)在安装之后可以执行run-time链接来更快地找到共享库。参考手册中的ldconfig获取更多信息。在FreeBSD,NetBSD,和OpenBSD系统中,命令是: /sbin/ldconfig –m /usr/local/pgsql/lib 其他的系统还不知道是否是同一条命令。

15.5.2 环境变量

如果您不是安装在系统默认搜寻程序的位置,而是/usr/local/pgsql或其他位置,您应该将/usr/local/pgsql/bin(或是您在步骤1设置的位置—bindir)添加到您的PATH中。严格地说,这是没必要的。但是它将使PostgreSQL变的更加方便。 要做这个,将下面的东西添加到您shell启动文件中,像~/.bash_profile(或/etc/profile,如果您想使它对所有用户有用的话) PATH=/usr/local/pgsql/bin:$PATH export PATH 如果您使用csh或tcsh,使用命令: set path = ( /usr/local/pgsql/bin $path ) 要使您系统找到man文件,除非您安装到默认能搜寻的位置,否则您需要像下面一样添加行到一个shell启动文件中,: MANPATH=/usr/local/pgsql/man:$MANPATH export MANPATH 环境变量PGHOST和PGPORT为用户指明了数据库服务器的主机和端口,不管默认的编译。如果您打算远程运行客户应用,则如果每个用户计划使用数据库设置PGHOST是非常方便的。然而不要求这点,设置可以通过命令行选项连接到大部分客户程序。

15.6 支持平台

当代码包含了可以在该平台上运行的规定并且最近已经证实了可以在该平台上编译和通过复原测试时,此平台被认为是PostgreSQL开发社区支持的平台。目前许多平台兼容性的测试通过PostgreSQL Build Farm中的测试机器自动完成。如果您对没有出现在build farm中的平台,但是在该平台上代码可以运行或可以被使得其运行,上使用PostgreSQL感兴趣的话,我们强烈建议您创建一个build farm member machine以便可以确保维持兼容性。

通常PostgreSQL可以在这些CPU architectures上工作:x86,x86_64,IA64, In general, PostgreSQL can be expected to work on these CPU architectures: x86, x86_64, IA64, PowerPC, PowerPC 64, S/390, S/390x, Sparc, Sparc 64, Alpha, ARM, MIPS, MIPSEL, M68K, and PA-RISC. 代码支持M32R, NS32K, and VAX,但是这些architectures目前还没有被测试。通过配置—disable-spinlocks在一个不受支持的CPU类型上编译是可以的,但是性能很糟糕。

我们期望PostgreSQL能在这些操作系统上运行:Linux (所有最近的发行版),Windows (Win2000 SP4 and later), FreeBSD, OpenBSD, NetBSD, Mac OS X, AIX, HP/UX, IRIX,Solaris, Tru64 Unix, and UnixWare。像Unix系统似的其他系统也可能能运行,但至目前为止还没有被测试。在大多数情况下,一个已知的操作系统所支持的所有CPU architectures都将能运行。参阅下面的15.7节看是否有关于您操作系统给的详细信息,尤其是您使用一个比较老的版本。

如果您在一个根据最近build farm 结果支持的平台上遇到安装问题,请将问题发送到 pgsql-bugs@postgresql.org。如果您对PostgreSQL在一个新的平台上运行感兴趣的话,pgsql-hackers@postgresql.org将是一个讨论它的好地方。

15.7 平台的详细说明

本节根据安装和设置PostgreSQL记载了额外的平台的详细问题。务必要阅读安装说明和15.2节的内容,同样,查阅第30章关于复原测试结果的解释。

这里没有涉及的平台没有详细的安装说明。

15.7.1 AIX

PostgreSQL可以在AIX上工作,但是正确安装它具有挑战性。AXI4.3.3到6.1版本被认为支持PostgreSQL,您可以使用GCC或IBM编译器xlc。一般来说,使用最近版本的AIX和PostgreSQL是支持的。核对build farm获得关于哪个版本的AIX被认为可以运行的更新信息。

The minimum recommended fix levels for supported AIX versions are: AIX 4.3.3 Maintenance Level 11 + post ML11 bundle AIX 5.1 Maintenance Level 9 + post ML9 bundle AIX 5.2 Technology Level 10 Service Pack 3 AIX 5.3 Technology Level 7 AIX 6.1 Base Level

要核查您最近的固定水平,在AIX4.3.3 至AIX5.2 ML7使用oslevel –r,或在更高版本中使用oslevel –s。

如果您已经在/usr/local安装了Readline或libz使用下面的configure flags:--with-includes=/usr/local/include --with-libraries=/usr/local/lib。

15.7.1.1 GCC Issues


15.7.2 Cygwin

可以使用Cygwin编译PostgreSQL,它是一个适用于Windows的类似Linux的环境,但是该方法没有Windows自身的编译好(参考第16章),我们不再推荐在Cygwin下运行服务器。

当用源码编译时,根据正常安装不走运行(即,./configure;make;等等)注意下面的Cygwin 详细区别:

• 在Windows实用程序之前设置使用Cygwin bin目录的路径,这会有助于阻止编辑时出错。

• GNU make命令是make而不是gmake。

• 不支持adduser命令,在Windows NT,2000,或XP中使用合适的用户管理程序,其它情况请跳过此步。

• 不支持su命令,在Windows NT,2000,或XP中使用ssh来模拟su,其它情况请跳过此步。

• 不支持OpenSSL

• 启动cygserver来支持共享内存,要执行这个,键入命令/usr/sbin/cygserver&,任何时候您启动PostgreSQL服务器或初始化一个数据库集群时必须运行该程序。必须得更改默认cygserver 配置来阻止因为系统资源的缺乏而导致的失败。

• 编译在某些系统上也许会失败,在这些系统中,使用的是locale而不是C。要安装这个,在编译前通过export LANG=C.utf8设置locale到C,并且在您安装完PostgreSQL后将其设回到初始的设置。

• 类似的复原测试(make check)由于过多的listen()backlog queue可能生成假的回归测试失败,这些backlog queue导致连接遭拒错误或暂停。您可以使用make变量MAX_CONNECTIONS来限制连接的数目:

Make MAX_CONNECTIONS=5 check

(在某些系统上您可以多于10个同时连接)。 安装cygserver和PostgreSQL服务器作为Windows NT 服务是可能的。关于如何做的信息,请参考包含在PostgreSQL二进制包中的READLME文件,它安装在目录/usr/share/doc/Cygwin中。

15.7.3 HP-UX

postgreSQL 7.3+应该在运行HP-UX 10.X 或11.X的序列700/800 PA-RISC机器上工作,给定合适的系统路径和编译工具。至少有一个开发商在HP-UX 10.20上测试过,并且我们已经有在HP-UX11.00 和11.11成功安装的报告。

除了PostgreSQL源码包,您还需要GNU make(HP的make不可以),和GCC或HP的全码ANSI C 编译器。如果您打算从Git 源码而不是distribution tarball来编译,您也需要Flex(GNU lex)和Bison(GNU yacc)。我们也建议您确保您能更新HP修补程序。最低限度下,如果你在HP-UX11.11上编译64位二进制您也许需要PHSS_30966(11.11)或一个后续的补丁否则initdb可能会中止:

PHSS_30966 s700_800 ld(1) 和linker tools cumulative patch

根据一般原则您应该有libc和ld/dld补丁,如果您使用HP的C编译器还应该有编译器补丁。参考HP的支持网站,例如 http://itrc.hp.comftp://usffs.external.hp.com ,免费复制最新版本的补丁。

如果您在PA-RISC 2.0机器上编译 ,并且希望使用GCC得到64位二进制文件,您必须使用64位GCC版本。可以从 http://www.hp.com/go/gcc上下载HP-UX PA-RISC的GCC和Itanium。别忘了同时下载和安装binutils。

如果您在PA-RISC 2.0机器上编译并且想要编译的二进制在PA-RISC1.1机器上运行,您必须在CFLAGS中指明+Daportable。

如果您在HP-UX Itanium机器上编译,您需要最新版本的HP ANSI C编译器和它相关的补丁或后来的补丁:

PHSS_30848 s700_800 HP C Compiler (A.05.57) PHSS_30849 s700_800 u2comp/be/plugin library Patch

如果您同时有HP的C 编译器和GCC,则在您运行configure时应该要清晰的选择您使用的编译器:

./configure CC=cc

或 ./configure CC=gcc

如果您省略该设置,假设有选择的话则configure会选择gcc。

默认安装目标位置是/usr/local/pgsql,您也许想更改到/opt下,在configure中使用—prefix。


15.7.4 IRIX

已经测试了PostgreSQL能在MIPS r8000,r10000 (ip25和ip27)和r12000(ip35) 处理器上成功运行,用7.30、 7.3.1.2m、7.3和7.4.4m版本的MIPSPro编译器运行。

您需要MIPSPro全ANSI C编译器,试图用GCC编译会出问题。这是个使用函数的相关已知的GCC调试


15.7.5 MinGW/Native Windows

在Windows上可以使用MinGW或Microsoft‘s Visual C++编译器套装来建立PostgreSQL,MinGW 是Microsoft操作系统中的一个类Unix编译环境的系统。MinGW编译装换使用本章介绍的常规编译系统,但Visual C++编译完全不同,在16章介绍。它是一个充分的本编译,并且不像MinGW一样使用额外的软件。一个预成功的安装在PostgreSQL主页上也有。

天然的windows 端口要求Windows2000或更高的32或64位版本。更早的操作系统没有足够的设施(但Cygwin可以使用)。需要运行像configure的shell脚本的类Unix编译工具的MinGW和Unix集合的MSYS可以从 http://www.mingw.org/ 下载。两者都不需要运行resulting 二进制文件,它们只有在创建二进制时才需要。

使用MinGW编译64位二进制文件,从http://mingww64.sourceforge.net/安装64位工具集,将其bin目录放在PATH中,运行configure时加选项--host=x86_64-w64-mingw。 在您安装完所有东西之后,建议您在CMD.EXE下运行psql,因为MSYS控制台有调试项。

15.7.1 在Windows上搜集Crash Dumps

如果在Windows下PostgreSQL毁坏,它由能力生成小备份用来追踪毁坏的原因,这和Unix系统上的核心备份类似。可以使用Windows Debugger工具或Visual Stdio来阅读这些dumps。要想能在Windows下允许生成备份,在数据集群目录下创建一个名为crashdumps的子目录。则dumps将被写进该目录,并根据毁坏过程的标识和毁坏的时间命名。

15.7.6 SCO OpenServer and SCO UnixWare

可以在SCO UnixWare7和SCO OpenServer5上建立PostgreSQL。在OpenServer上,您可以使用OpenServer Development Kit或Universal Development Kit。然而,也许需要下面描述的一些tweaking。

15.7.6.1 Skunkware

您应该找到您SCO Skunkware CD的副本,Skunkware CD包含在UnixWare7 和目前的OpenServer5版本中,Skunkware 包含许多可以在网上下载的普及程序的预安装版本。例如,包含gzip,gunzip,GNU make,Flex和Bison。对于UnixWare 7.1,该CD现在标志为Open License Software Supplement。如果您没有这个CD,可以从网上找到该软件, http://www.sco.com/skunkware/。

对于UnixWare 和OpenServer Skunkware有不同的版本,除了下面提到你之外,确保您在您系统上安装的是正确的版本。

在UnixWare 7.1.3上,GCC 编译器作为GNU make包含在UDK CD内。

15.7.6.2 GNU Make

您需要使用GNU Make程序,它在Skunkware CD中。默认情况下它安装到/usr/loal/bin/make。为了避免和SCO make程序的冲突,您也许想将其重命名为gmake。

至于UnixWare 7.1.3及更高版本,GNU Make程序在UDK CD 的OSTK部分,并安装在/usr/gnu/bin/gmake。

15.7.6.3 Readline

Readline 库在Skunkware CD中,但它不包含在UnixWare 7.1 Skunkware CD中,如果您有UnixWare7.0.0或7.0.1Skunkware CDs,您可以从那里安装。否则请试 http://www.sco.com/skunkware/

默认情况下Readline安装在/usr/local/lib 和 /usr/local/include中,然而,PostgreSQL在没有帮助下找不到它,如果您安装Readline,则运行configure时使用下面选项:

./configure --with-libraries=/usr/local/lib --with-includes=/usr/local/include

15.7.6.4 在OpenServer上使用UDK

如果您在OpenServer上使用新的Universal Development Kit(UDK),则您需要指定UDK库的位置:

./configure --with-libraries=/udk/usr/lib --with-includes=/udk/usr/include

将这些和上面的Readline选项放在一起:

./configure --with-libraries="/udk/usr/lib /usr/local/lib" --with-includes="/udk/usr/include /usr/local/include"

15.7.6.5 阅读PostgreSQL Man Pages

默认情况下PostgreSQL man pages安装在/usr/local/pgsql/man中,而通常UnixWare不要到那里搜寻man pages,要想阅读它您需要修改/etc/default/man中的MANPATH变量,例如:

MANPATH=/usr/lib/scohelp/ %L/man:/usr/dt/man:/usr/man:/usr/share/man:scohelp:/usr/local/man:/usr/local/pgsql/man

在OpenServer中,需要进行额外的研究来使man pages可用,因为man系统和其他平台有点不同,目前,PostgreSQL根本不安装它们。

15.7.6.6 7.1.1b特征补充的C99 问题

对于早于OpenUNIX8.0.0发行版地编译器,包括7.1.1b Feature Supplement,您也许需要在FLAGS或CC环境变量中指定 –Xb。这样的指示是编译tuplesort.c时的一个错误。很明显在7.1.2(8.0.0)编译器中有改变。

15.7.6.6 Threading on UnixWare

对于threading,在所有libpq使用程序上,您必须使用-Kpthread。Libpq使用pthread_*calls,它仅在使用了-Kpthread/-Kthread 标志后才有用。

15.7.7 Solaris

Solaris非常支持PostgreSQL,您的操作系统版本越新,将遇到的问题会越少;参考下面的细节.

注意PostgreSQL是和Solaris(从升级版本2开始)捆绑在一块的。您可以到 http://pgfoundry.org/projects/solarispackages/ 获得官方包。您可以从 http://www.sunfreeware.com/ or http://www.blastwave.org/ 获取适合老版本的Solaris版本(8,9)的软件包。

15.7.7.1 需求工具

您可以使用GCC或Sun‘s编译套装来编译,为了更好的优化代码,我们强烈建议您在SPARC体系上使用Sun‘s编译器。在使用GCC2.95.1时我们听到了错误的报告。推荐您使用gcc2.95.3或更高版本,如果您使用Sun‘s编译器,注意不要选择/usr/ucb/cc,使用 /opt/SUNWspro/bin/cc。

您可以从http://developers.sun.com/sunstudio/downloads/下载Sun Studio。许多GNU 工具都加到了Solaris10中,或出现在Solaris附送的CD中。如果您喜欢适合老版本的Solaris的包,您可以在 http://www.sunfreeware.comhttp://www.blastwave.org 找到他们的工具,如果您喜欢源码,查阅 http://www.gnu.org/order/ftp.html。

15.7.7.2 OpenSSL的问题

当编译时启动支持OpenSSL功能时,在下面文件中您也许会遇到编译错误:

  • src/backend/libpq/crypt.c
  • src/backend/libpq/password.c
  • src/interfaces/libpq/fe-auth.c
  • src/interfaces/libpq/fe-connect.c

这是因为标准/usr/include/crypt.h头文件和OpenSSL提供的头文件发生命名冲突。

将您的OpenSSL安装升级到版本0.9.6a可以解决这个问题。Solaris9及以上版本有新版本的OpenSSL。

15.7.7.3 configure抱怨一个失败的测试程序

如果configure抱怨一个失败的测试程序,这可能是连接程序运行时不能找到一些库,可能是libz、libreadline或一些例如libssl的其他非标准库。要指向正确的位置,在configure命令行中设置环境变量LDFLAGS,例如:

configure ... LDFLAGS="-R /usr/sfw/lib:/opt/sfw/lib:/usr/local/lib"

参考老版本的手册获取更多信息。

15.7.7.4 64位编译有时会死机

在Solaris7和更老版本中,64位版本的libc有个调试snprintf过程,它会导致核心映像转储。解决的最简单的方法是强迫PostgreSQL使用它自己的vsnprintf而不是复制库的。要做这个,在您运行完configure后编辑一个由configure生成的文件,在src/Makefile.global,更改行

LIBOBJS =

阅读

LIBOBJS = snprintf.o

(在这个变量中也许存在其他的文件,顺序没关系)然后按正常顺序编译。

15.7.7.5 最佳操作的编译

在SPARC体系里,我们强烈建议使用Sun Studio编译,试着使用-x05优化标志来生成二进制文件。不要使用任何修改浮点操作行为的标志和errno处理。这些标志可能引起一些例如date/time输出的非标准的PostgreSQL行为。

如果您没有任何理由在SPARC上使用64位二进制,请使用32位版本。64位操作更慢并且64位二进制变量比32位更慢。另一方面,在AMD64 CPUfamily上32位代码不是本机的,这就是为什么32位代码在这个CPU family上更慢的原因。

调试PostgreSQL和Solaris性能的一些技巧可以在 http://www.sun.com/servers/coolthreads/tnb/applications_postgresql.jsp找到。这篇文章主要针对于T2000平台,但是许多说明在其他Solaris硬件上也有用。

15.7.7.6 使用DTrace 跟踪PostgreSQL

的确,使用DTrace是可能的。参考27.4节获取更多的信息。您可以在这篇文章找到更多信息 http://blogs.sun.com/robertlor/entry/user_level_dtrace_probes_in。

如果您看见postgers连接中止,出现像这样的错误信息:

Undefined first referenced

symbol                             in file

AbortTransaction utils/probes.o CommitTransaction utils/probes.o ld: fatal: Symbol referencing errors. No output written to postgres collect2: ld returned 1 exit status gmake: *** [postgres] Error 1

您的DTrace安装太旧了以至不能处理统计函数中的预言,您需要Solaris10u4或更新的。