# 17.7.平台特定注释
本节记录了有关PostgreSQL安装和设置的其他特定于平台的问题。请务必阅读安装说明,尤其是第17.2节也还有,检查一下第33章关于回归测试结果的解释。
此处未涉及的平台没有已知的特定于平台的安装问题。
# 17.7.1.艾克斯
PostgreSQL可以在AIX上运行,但大约6.1之前的AIX版本存在各种问题,不推荐使用。您可以使用GCC或本机IBM编译器xlc
.
# 17.7.1.1.内存管理
AIX在内存管理方面可能有些特殊。你可以让一台服务器有很多倍于千兆字节的可用内存,但在运行应用程序时仍然会出现内存不足或地址空间错误。一个例子是加载因异常错误而失败的扩展。例如,作为PostgreSQL安装的所有者运行:
=# CREATE EXTENSION plperl;
ERROR: could not load library "/opt/dbs/pgsql/lib/plperl.so": A memory address is not in the address space for the process.
在拥有PostgreSQL安装的组中以非所有者身份运行:
=# CREATE EXTENSION plperl;
ERROR: could not load library "/opt/dbs/pgsql/lib/plperl.so": Bad address
另一个例子是PostgreSQL server日志中的内存不足错误,每个接近或大于256 MB的内存分配都失败。
所有这些问题的总体原因是服务器进程使用的默认内存模型。默认情况下,AIX上构建的所有二进制文件都是32位的。这并不取决于使用的硬件类型或内核。这些32位进程被限制为4 GB的内存,使用少数几种型号中的一种,以256 MB的段排列。默认情况下,由于堆与堆栈共享一个段,因此堆中的内存小于256 MB。
就plperl
在上面的示例中,检查您的umask和PostgreSQL安装中二进制文件的权限。该示例中涉及的二进制文件是32位的,以750模式安装,而不是755模式。由于权限是以这种方式设置的,因此只有所有者或拥有组的成员才能加载库。由于它不是全世界可读的,加载程序会将对象放入进程的堆中,而不是放在共享库段中。
实现这一点的“理想”解决方案是使用64位PostgreSQL构建,但这并不总是实用的,因为使用32位处理器的系统可以构建但不能运行64位二进制文件。
如果需要32位二进制,则设置LDR_CNTRL
到MAXDATA=0x*
n*0000000
,其中1\<=n\<=8,然后启动PostgreSQL server,并尝试不同的值和postgresql。形态
设置,以找到令人满意的配置。使用LDR_CNTRL
告诉AIX您希望服务器MAXDATA
为堆预留的字节,以256 MB的段分配。当你找到一个可行的配置,ldedit
可以用来修改二进制文件,使其默认使用所需的堆大小。PostgreSQL也可以通过configure LDFLAGS=“-Wl,-bmaxdata:0x*
n*0000000"
达到同样的效果。
对于64位构建,设置对象模式
到64岁就过关了CC=“gcc-maix64”
和LDFLAGS=“-Wl,-bbigtoc”
到配置
选择xlc
可能会有所不同。)如果你忽略了对象模式
,您的生成可能会失败,并出现链接器错误。什么时候对象模式
它告诉AIX的构建实用程序,例如应收账
, 像
和ld
默认处理的对象类型。
默认情况下,分页空间可能会过度使用。虽然我们还没有看到这种情况发生,但AIX在内存不足并且访问了overmit时会杀死进程。我们所看到的最接近这一点的是fork失败,因为系统决定没有足够的内存用于另一个进程。与AIX的许多其他部分一样,如果出现问题,分页空间分配方法和内存不足终止可以在系统或进程范围内进行配置。
# 17.7.2.西格温
PostgreSQL可以使用Cygwin构建,Cygwin是一种类似Linux的Windows环境,但这种方法不如原生Windows构建(请参阅第18章)不再推荐在Cygwin下运行服务器。
从源代码构建时,请按照Unix风格的安装过程进行(即。,/配置;制作
; 注意到以下Cygwin的具体差异:
在Windows实用程序之前设置使用Cygwin bin目录的路径。这将有助于防止编译出现问题。
这个
新增用户
不支持命令;在Windows NT、2000或XP上使用适当的用户管理应用程序。否则,跳过这一步。这个
苏
不支持命令;在Windows NT、2000或XP上使用ssh模拟su。否则,跳过这一步。不支持OpenSSL。
开始
cygserver
共享内存支持。要执行此操作,请输入命令/usr/sbin/cygserver&
。无论何时启动PostgreSQL server或初始化数据库群集,都需要运行此程序(initdb
).默认值cygserver
配置可能需要更改(例如,增加SEMMNS
)防止PostgreSQL因系统资源不足而失败。在某些使用非C语言环境的系统上,构建可能会失败。要解决此问题,请通过执行以下操作将区域设置设置为C
export LANG=C.utf8
然后在安装PostgreSQL后将其设置回之前的设置。平行回归检验(
核对一下
)由于溢出数据,可能会产生虚假的回归测试失败听着
导致连接被拒绝错误或挂起的积压队列。可以使用make变量限制连接数MAX_连接
因此:make MAX_CONNECTIONS=5 check
(在某些系统上,最多可以同时连接10个左右。)
可以安装
cygserver
以及作为Windows NT服务的PostgreSQL server。有关如何执行此操作的信息,请参阅自述
Cygwin上的PostgreSQL二进制软件包附带的文档。它安装在目录中/usr/share/doc/Cygwin
.
# 17.7.3.马科斯
要在macOS上从源代码构建PostgreSQL,您需要安装Apple的命令行开发工具,这可以通过发布
xcode-select --install
(请注意,这将弹出一个GUI对话框窗口进行确认)。您可能希望也可能不希望安装Xcode。
在最近的macOS版本中,有必要在用于查找某些系统头文件的include开关中嵌入“sysroot”路径。这会导致配置脚本的输出因配置期间使用的SDK版本而异。在简单的场景中,这应该不会造成任何问题,但是如果您试图在不同的机器上构建扩展,而不是在构建服务器代码的机器上,那么可能需要强制使用不同的sysroot路径。要做到这一点,设置PG_系统根
例如
make PG_SYSROOT=/desired/path all
要在计算机上找到合适的路径,请运行
xcrun --show-sdk-path
请注意,不建议使用与构建核心服务器不同的sysroot版本构建扩展;在最坏的情况下,它可能会导致难以调试ABI不一致。
您还可以在配置时通过指定PG_系统根
要配置:
./configure ... PG_SYSROOT=/desired/path
这对于其他macOS版本的交叉编译非常有用。无法保证生成的可执行文件将在当前主机上运行。
镇压-伊斯根
所有选项,使用
./configure ... PG_SYSROOT=none
(任何不存在的路径名都可以使用)。如果您希望使用非Apple编译器构建,这可能很有用,但请注意,PostgreSQL开发人员没有测试或支持这种情况。
macOS的“系统完整性保护”(SIP)功能中断核对一下
,因为它阻止通过所需的DYLD_库_路径
具体到被测试的可执行文件。你可以通过这样做来解决这个问题制作安装
之前核对一下
.不过,大多数PostgreSQL开发人员只是关闭了SIP。
# 17.7.4.MinGW/本机Windows
Windows的PostgreSQL可以使用微软的操作系统的Inix类构建环境,或者使用微软的Visual C++编译器套件来构建。MinGW构建过程使用本章中描述的正常构建系统;VisualC++的构建完全不同,并在第18章.
本机Windows端口需要32或64位版本的Windows 2000或更高版本。早期的操作系统没有足够的基础设施(但Cygwin可用于这些系统)。MinGW是类Unix的构建工具,MSYS是运行类shell脚本所需的Unix工具集合配置
,可从http://www.mingw.org/ (opens new window)。两者都不需要运行生成的二进制文件;它们仅用于创建二进制文件。
要使用MinGW构建64位二进制文件,请从安装64位工具集https://mingw-w64.org/ (opens new window),将其bin目录放入路径
,然后跑配置
和--主机=x86_64-w64-mingw32
选项
安装完所有内容后,建议您在下运行psqlCMD。EXE
,因为MSYS控制台存在缓冲问题。
# 17.7.4.1.在Windows上收集崩溃转储
如果Windows上的PostgreSQL崩溃,它可以生成微型转储,用于跟踪崩溃原因,类似于Unix上的核心转储。可以使用Windows调试器工具或Visual Studio读取这些转储。要在Windows上生成转储,请创建名为撞车
在集群数据目录中。然后,根据崩溃进程的标识符和崩溃的当前时间,转储将以唯一的名称写入该目录。
# 17.7.5.Solaris
PostgreSQL在Solaris上得到了很好的支持。你的操作系统越先进,你遇到的问题就越少。
# 17.7.5.1.所需工具
您可以使用GCC或Sun的编译器套件进行构建。为了更好地优化代码,强烈建议在SPARC体系结构上使用Sun的编译器。如果使用Sun的编译器,请小心不要选择/usr/ucb/cc
; 使用/opt/SUNWspro/bin/cc
.
您可以从以下网站下载Sun Studio:https://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/ (opens new window)。许多GNU工具集成到Solaris 10中,或者出现在Solaris companion CD上。如果您需要Solaris旧版本的软件包,可以在以下网站找到这些工具:http://www.sunfreeware.com (opens new window).如果你更喜欢来源,看看https://www.gnu.org/prep/ftp (opens new window).
# 17.7.5.2.配置有关测试程序失败的投诉
如果配置
抱怨测试程序失败,这可能是因为运行时链接器找不到某个库,可能是libz、libreadline或其他非标准库,如libssl。要将其指向正确的位置,请设置LDFLAGS
网络上的环境变量配置
命令行,例如。,
configure ... LDFLAGS="-R /usr/sfw/lib:/opt/sfw/lib:/usr/local/lib"
有关更多信息,请参阅ld手册页。
# 17.7.5.3.编译以获得最佳性能
在SPARC体系结构上,强烈建议编译Sun Studio。尝试使用-xO5
优化标志以生成更快的二进制文件。不要使用任何修改浮点运算行为的标志呃不
处理(例如。,-快
).
如果您没有理由在SPARC上使用64位二进制文件,请选择32位版本。64位操作比32位变体慢,64位二进制文件比32位变体慢。另一方面,AMD64 CPU系列上的32位代码不是本机代码,因此该CPU系列上的32位代码要慢得多。
# 17.7.5.4.使用DTrace跟踪PostgreSQL
是的,使用DTrace是可能的。看见第28.5节了解更多信息。
如果你看到博士后
可执行文件中止,错误消息如下:
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
make: *** [postgres] Error 1
DTrace安装太旧,无法处理静态函数中的探测。您需要Solaris 10u4或更新版本才能使用DTrace。