©
本文档使用 PHP中文网手册 发布
本章节是讲在一些特殊平台上的PostgreSQL的安装和设置。 一定要阅读安装说明,尤其是Section 15.2。 依据回归测试结果的说明,检测 Chapter 30。
对于本章节没有提到的使用平台,它们不存在以下这些特殊的平台所要注意的问题。
虽然PostgreSQL可以在AIX上正常工作运行,但如何能正确安装却是一个难点。 AIX的版本中,已知的,能够支持的版本范围是从4.3.3到6.1。 你可以使用GCC或本地的IBM编译器xlc。 一般情况下,使用最新版本的AIX和PostgreSQL就可以。 根据那些已知的,可以支持PostgreSQL的AIX版本号来判断应该使用的AIX版本。
支持AIX版本的最低安装级别:
Maintenance Level 11 + post ML11 bundle
Maintenance Level 9 + post ML9 bundle
Technology Level 10 Service Pack 3
Technology Level 7
Base Level
查看AIX的版本、发行号、ML(Maintenance Level)级别: 4.3.3到5.2 ML 7之间的版本,使用oslevel -r;之后的版本使用oslevel -s。
如果您已经在/usr/local安装了Readline或者libz,除了你自己,使用以下configure参数: --with-includes=/usr/local/include --with-libraries=/usr/local/lib。
在AIX5.3中,使用GCC编译和运行PostgreSQL存在一些问题。
你将要使用GCC 3.3.2及其之后的版本,特别是当使用的是预打包版。4.0.1版已被验证通过。 早期版本存在的问题似乎与IBM包装GCC方式比GCC实际问题更有关,所以,如果你自己编译GCC,你很可能会用GCC早期版本。
AIX5.3中有一个问题, 在sockaddr_storage不定义足够大。在5.3版本中,IBM增加了sockaddr_un的大小, 地址为Unix域套接字组织结构, ,但并没有相应增加sockaddr_storage的大小。 这一结果尝试使用Unix域套接字的PostgreSQL 导致libpq溢出数据结构。 TCP/IP连接运行良好,但没有Unix域套接字, 从而避免工作中回归测试。
问题报道给IBM,并记录错误报告PMR29657。如果升级到维护级别5300-03或更高版本, 这将包括此修复程序。 一个快速的解决方法是在/usr/include/sys/socket.h中 改变_SS_MAXSIZE到1025。在这两种情况下,一旦你有校正的头文件,重新编译PostgreSQL。
PostgreSQL依赖于系统的getaddrinfo
功能
解析listen_addresses,pg_hba.conf等中的IP地址。
旧版本的AIX此功能有各类缺陷。如果你有有关这些设置的问题,
更新上面显示的适当AIX修复级别,应该处理它。
一个用户报告:
在AIX5.3上运行PostgreSQL8.1版本时,we periodically ran into problems where the statistics collector would "mysteriously" not come up successfully. 这似乎是在IPv6实施的意外行为结果。它看起来像PostgreSQL和IPv6,不能很好地结合在AIX 5.3上。
任何以下执行"fix"问题。
删除对localhost的IPv6地址:
(as root) # ifconfig lo0 inet6 ::1/0 delete
删除IPv6的网络服务。 AIX上的文件/etc/netsvc.conf大致 相当于在Solaris/Linux上的/etc/nsswitch.conf。 缺省情况下,在AIX上,因此:
hosts=local,bind
替换:
hosts=local4,bind4
停用IPv6地址。
这的确是一个 有关IPv6支持不成熟问题的解决方法,在AIX5.3版本有明显改善 它曾运行与AIX5.3版本,但并不代表一个良好的解决问题的方法。 据报道,此方法不仅不必要,但在AIX 6.1,支持IPv6变得更加成熟出现问题。
AIX有些独特的内存管理方式。你可以有多倍数RAM千兆字节的服务器,当正运行应用程序时,但仍需摆脱内存或地址 空间错误。createlang没有不寻常错误的一个例子。 例如,运行PostgreSQL安装的所有者:
-bash-3.00$ createlang plperl template1 createlang: language installation failed: ERROR: could not load library "/opt/dbs/pgsql748/lib/plperl.so": A memory address is not in the address space for the process.
在PostgreSQL安装过程时作为一个非所有者运行:
-bash-3.00$ createlang plperl template1 createlang: language installation failed: ERROR: could not load library "/opt/dbs/pgsql748/lib/plperl.so": Bad address
另一个例子是PostgreSQL服务器日志没有内存错误, 每个内存分配接近或大于256MB。
所有这些问题的原因是默认bittedness 和服务器进程使用的内存模型。缺省情况下,所有 在AIX上编译的二进制是32位。这并不取决于 硬件类型或内核使用。这些32位进程限于使用 几个模型的256MB段中展开的4GB内存。缺省情况下允许堆中共享堆栈中的单段小于256MB。
就createlang例子,上面的情况, 检查你的umask和PostgreSQL安装中二进制文件的权限 。在这个例子中涉及的二进制文件是 32位和安装模式是750而不是755。由于 以这种方式设置权限,只有所有者或拥有组成员 可以加载库。因为它不是众人可读的, 加载者将对象放入过程堆,而不是共享库段,否则被放置。
"ideal"这个解决方案是使用64位 编译的PostgreSQL,但并不总是可行的,因为 32位处理器的系统可以编译,但不能运行64位 二进制文件。
如果需要一个32位二进制,设置LDR_CNTRL to MAXDATA=0xn0000000,即1 <= n <= 8, 开始PostgreSQL服务器之前,并且尝试不同的值和postgresql.conf设置找到令人满意的配置。 LDR_CNTRL的使用告诉AIX,希望 服务器为堆预留MAXDATA字节,分配256MB的段。当你找到一个可行 配置,ldedit可以用来修改二进制文件,所以 他们默认使用所需的堆大小。 PostgreSQL也可以重新编译 ,通过configure LDFLAGS="-Wl,-bmaxdata:0xn0000000"获得同样的效果。
对于64位编译,设置OBJECT_MODE到64,并且通过CC="gcc -maix64" 和LDFLAGS="-Wl,-bbigtoc"到configure。(xlc选项可能不同。) 如果你省略了OBJECT_MODE出口,你的编译链接错误可能失败。 当OBJECT_MODE设置了,它告诉AIX编译实用程序,比如 ar, as, 和ld,默认处理的对象类型。
缺省情况下,过量的分页空间可能发生。虽然我们有 没有看到这种情况发生,当用完 内存和访问过量,AIX将杀死进程。 这最接近我们所看到的叉失败,因为系统的决定,另一个进程没有足够的内存。 像其他许多AIX,如果这成为一个问题,分页空间分配方法和out-of-memory kill 在系统或全过程基础上可配置的。
"Large Program Support", AIX Documentation: General Programming Concepts: Writing and Debugging Programs AIX文档:通用编程概念:编写并调试程序.
"Program Address Space Overview", AIX Documentation: General Programming Concepts: Writing and Debugging Programs AIX文档:通用编程概念:编写并调试程序.
"Performance Overview of the Virtual Memory Manager (VMM)", AIX Documentation: Performance Management Guide AIX文档:性能管理指南.
"Page Space Allocation", AIX Documentation: Performance Management Guide AIX文档:性能管理指南.
"Paging-space thresholds tuning", AIX Documentation: Performance Management Guide AIX文档:性能管理指南.
Developing and Porting C and C++ Applications on AIX, IBM Redbook.
PostgreSQL可使用Cygwin编译,像一个Linux环境的 Windows,但这种方法不如本地的Windows编译,(see Chapter 16) 不再推荐。
当继续按照正常的安装过程从源代码编译时,(即./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服务器或初始化一个数据库集群 (initdb)。 缺省cygserver配置可能需要 被改变(例如,增加SEMMNS) 防止PostgreSQL的失败,由于缺乏系统资源。
并行的回归测试(make check)
可以产生虚假回归测试失败,由于溢出
listen()
储存队列,
这会导致连接拒绝错误或挂起。您可以限制
使用make变量MAX_CONNECTIONS的连接数,因此:
make MAX_CONNECTIONS=5 check
(在某些系统上,你可以有多达约10个同步连接)。
它可以安装cygserver和 PostgreSQL服务器作为Windows NT服务。关于如何要做到这一点的信息, 请参阅README文件,包括在Cygwin中的PostgreSQL的二进制包。它被安装在目录/usr/share/doc/Cygwin。
PostgreSQL 7.3+在系列700/800的PA-RISC机器 运行HP-UX 10.x或11.X,给予相应的系统补丁级别 和编译工具。至少有一个开发人员经常在HP-UX 10.20测试,我们有在HP-UX 11.00和11.11上成功安装报告。
除了PostgreSQL源分布,你将需要GNU(惠普的牌子不会做),GCC或惠普的完整ANSI C编译器。 如果你打算从Git源编译,而不是发布包,你还需要(GNU lex)和Bison (GNU yacc)。我们还建议,确定你是最新的HP修补程序。至少,如果你正在HP-UX11.11上编译64 位二进制,您可能需要PHSS_30966 (11.11)或 后继补丁,否则initdb可能会挂起:
如果您正在PA-RISC 2.0机上编译,并希望有 使用GCC的64位二进制代码,您必须使用GCC 64位版本。HP-UX PA-RISC和Itanium的GCC二进制 文件都可以从 http://www.hp.com/go/gcc获得。不要忘了同时获取并安装binutils。
如果你正在PA-RISC 2.0机上编译,并希望编译的 二进制在PA-RISC 1.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
如果你有惠普的C编译器和GCC的,那么, 当运行configure时,你可能想 明确选择使用的编译器:
./configure CC=cc
惠普的C编译器,或
./configure CC=gcc
为GCC。如果省略此设置,然后配置 选择gcc如果它有一个选择。
缺省安装目标位置是/usr/local/pgsql,你可能想 改变在/opt中的东西。如果是这样,使用 --prefix切换到configure。
在回归测试中,可能会有一些几何测试的低阶位数差异 ,它依赖于你使用的编译器和数学库版本。任何其他的错误引起怀疑。
PostgreSQL已成功地运行在MIPS R8000, r10000(ip25和ip27)和r12000(ip35)处理器,运行 IRIX的6.5.5m,6.5.12,6.5.13,和6.5.26与MIPSPro编译器 版本7.30,7.3.1.2m,7.3,和7.4.4m。
你将需要MIPSPro完整的ANSI C编译器。有
试图用GCC编译的问题。这是一个与返回
某些结构的使用函数相关的已知的GCC错误(非
固定为3.0版本)。此漏洞影响inet_ntoa
, inet_lnaof
, inet_netof
, inet_makeaddr
,
和semctl
的功能。它应该被固定,通过强制代码到连接libgcc的这些功能。
但一直没有这样做过测试。
据了解,7.4.1m版本的MIPSPro编译器生成 不正确的代码。当试图启动数据库,症状是"无效的主要检查站点 记录")。版本7.4.4m 是确定的;中间版本的状态是不确定的。
可能有类似下面的编译问题:
cc-1020 cc: ERROR File = pqcomm.c, Line = 427 The identifier "TCP_NODELAY" is undefined. if (setsockopt(port->sock, IPPROTO_TCP, TCP_NODELAY,
一些版本中包括在sys/xti.h的TCP定义 ,所以在src/backend/libpq/pqcomm.c和 src/interfaces/libpq/fe-connect.c中 添加#include <sys/xti.h>是必须的, 如果您遇到这一点,请让我们知道,我们可以制定一个适当修复。
在回归测试中,可能会有一些几何测试的低阶位数差异,它依赖于你使用的FPU。任何其他的错误引起怀疑。
用于Windows的PostgreSQL可以使用MinGW编译,一个类似Unix开发 微软操作系统的环境,或使用 微软Visual C++编译器套件。 MinGW的开发变种使用本章描述的标准编译系统; Visual C++开发运行完全不同和在Chapter 16中描述。 这是一个完全本地开发,并且不使用附加软件,如 MinGW。在主要的PostgreSQL网站上可利用已有安装。
本地Windows端口需要Windows 2000或更高的32位或64位版本。早期的操作系统 没有足够的基础设施(但Cygwin可以用 )。MinGW,类似Unix的构建工具,和MSYS,Unix工具集合 需要运行像configureshell脚本, 可从http://www.mingw.org/下载。 不需要运行所产生的二进制文件,他们需要创建二进制文件。
你安装所有东西后,建议您根据CMD.EXE 运行psql ,因为MSYS控制台存在缓冲问题。
PostgreSQL可以建立在SCO UnixWare7和SCO OpenServer5上。 在OpenServer上,你可以使用OpenServer开发工具包 或通用的开发工具包。然而,一些调整可能 需要,如下所述。
你应该找到SCO Skunkware CD副本。 Skunkware CD包括UnixWare 7和OpenServer 5当前版本 。Skunkware包括互联网上可用的许多受欢迎方案的现成安装版本。 例如,gzip, gunzip, GNU Make, Flex,和Bison都 包括在内。 UnixWare7.1,此CD目前标记为开放许可软件增补,如果你没有这个CD,来自http://www.sco.com/skunkware/的软件是可用的。
为UnixWare和OpenServer,Skunkware有不同的版本。 确保为您的操作系统安装正确的版本,除下文所述。
在UnixWare 7.1.3和之外,GCC编译器包含在 UDK CD中的是GNU Make。
你需要使用GNU make程序,这些在Skunkware CD上 。缺省情况下,它作为/usr/local/bin/make安装。为了避免 与SCOmake程序混淆,你可能要重新命名GNUmake到gmake。
UnixWare 7.1.3及以上,GNU Make程序是UDK CD的OSTK部分,是在/usr/gnu/bin/gmake文件中。
Readline库在Skunkware CD上。但它并不包含在UnixWare 7.1 Skunkware CD上。如果你有 UnixWare 7.0.0或7.0.1 Skunkware CDs,您可以从 那里安装它。否则,尝试http://www.sco.com/skunkware/。
缺省情况下,Readline安装到/usr/local/lib和 /usr/local/include。然而, PostgreSQLconfigure程序没有帮助将无法找到它 。如果你安装ReadLine,然后使用 下列选项到configure:
./configure --with-libraries=/usr/local/lib --with-includes=/usr/local/include
如果您正在OpenServer上使用新的通用开发工具包(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"
缺省情况下,PostgreSQL手册页安装到 /usr/local/pgsql/man。缺省情况下,UnixWare 不查看手册页。为了能读,你需要在/etc/default/man文件中修改 MANPATH的变量,例如:
OpenServer上,一些额外研究需要投入使手册页可用,因为帮助系统不同于其他平台。目前,PostgreSQL不安装它们。
比OpenUNIX 8.0.0发布的更早的编译器 (UnixWare 7.1.2),包括7.1.1b功能补充,可能需要在CFLAGS或者CC 环境变量中指定-Xb。在编译tuplesort.c引用联 功能中,这一指示是一个错误。在7.1.2(8.0.0)编译器和之上显然是一个改变。
为线程,你一定在全部使用libpq的程序上使用-Kpthread。
libpq使用pthread_*
调用,这是唯一与-Kpthread/-Kthread标志可用的。
PostgreSQL是Solaris上的良好支持。更新您的 操作系统越多,您遇到的问题越少;细节如下。
请注意,PostgreSQL与Solaris 10(更新2)捆绑在一起。 在http://pgfoundry.org/projects/solarispackages/上的官方包可用。 旧的Solaris版本(8, 9)的软件包,你能从http://www.sunfreeware.com/或者 http://www.blastwave.org/获得。
您可以建立与GCC或Sun的编译器套件。为 更好的代码优化,强烈建议Sun的编译器放 在SPARC架构上。当建议使用GCC 2.95.1; gcc 2.95.3或更高版本时,我们可听到问题报告。如果 您正在使用Sun的编译器,要小心,不要选择/usr/ucb/cc文件;使用/opt/SUNWspro/bin/cc文件。
你可以从http://developers.sun.com/sunstudio/downloads/那下载Sun Studio。 许多GNU工具都集成到Solaris 10,或者他们 存在于Solaris配套光盘上。如果你想要Solaris旧版本的包,你可以在 http://www.sunfreeware.com 或者http://www.blastwave.org找到这些工具。如果你想要源代码,可查阅http://www.gnu.org/order/ftp.html。
当您建立PostgreSQL与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,以修复这个 问题。 Solaris 9和以上有OpenSSL的较新版本。
如果configure对一个失败的测试程序报错, 这可能是一个运行时链接的情况, 无法找到一些库,libz, libreadline或某些 其他非标准库,如libssl。它指向 正确的位置,在configure命令行设置LDFLAGS的环境 变量,例如,
configure ... LDFLAGS="-R /usr/sfw/lib:/opt/sfw/lib:/usr/local/lib"
参阅ld手册页获得更多的信息。
在Solaris7及以上,libc的64位版本有一个错误
vsnprintf
程序,从而导致不稳定
核心转储在PostgreSQL中。已知的最简单的解决办法是
强迫PostgreSQL利用其vsnprintf
的自身版本,而不是
库副本。要做到这一点,之后运行configure编辑一个通过configure产生的文件:
在src/Makefile.global文件中,更改线路
LIBOBJS =
用来读
LIBOBJS = snprintf.o
(有可能是已经列在这个变量中的其他文件。顺序并不重要。)然后像往常一样建立。
在SPARC架构上,Sun Studio强烈推荐汇编。尝试使用-xO5优化 标志生成速度明显加快的二进制文件。不使用任何 浮点运算修改行为的标志和errno的处理(例如, -fast)。这些标志可以提高一些非标准PostgreSQL行为,例如日期/时间计算。
如果你没有使用SPARC上64位二进制和选择32位版本的原因, 。64位操作速度较慢,64位二进制慢于32位的。 另一方面,在AMD64 CPU上32位代码不是本地的, 这就是32位代码显著慢于这个CPU的原因。
一些调节PostgreSQL的技巧和Solaris性能可以在http://www.sun.com/servers/coolthreads/tnb/applications_postgresql.jsp 中找到。本文主要侧重于T2000平台,但有关Solaris的其他硬件的许多建议很有用。
是的,使用DTrace是可能的。参阅 Section 27.4获得更多的信息。你也能在文章http://blogs.sun.com/robertlor/entry/user_level_dtrace_probes_in 中查找更多的信息。
如果你看到postgres链接可执行中止 错误信息,如
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安装太旧而不能处理静态函数的探查。你需要Solaris 10u4或更高版本。