PostgreSQL服务器管理:从源代码安装

丰富的线上&线下活动,深入探索云世界

做任务,得社区积分和周边

最真实的开发者用云体验

让每位学生受益于普惠算力

让创作激发创新

资深技术专家手把手带教

遇见技术追梦人

技术交流,直击现场

海量开发者使用工具、手册,免费下载

极速、全面、稳定、安全的开源镜像

开发手册、白皮书、案例集等实战精华

为开发者定制的Chrome浏览器插件

1.简单版

./configuremakesumakeinstalladduserpostgresmkdir/usr/local/pgsql/datachownpostgres/usr/local/pgsql/datasu-postgres/usr/local/pgsql/bin/initdb-D/usr/local/pgsql/data/usr/local/pgsql/bin/postgres-D/usr/local/pgsql/data>logfile2>&1&/usr/local/pgsql/bin/createdbtest/usr/local/pgsql/bin/psqltest本章剩余部分都是完全版。

2.要求

编译PostgreSQL需要下列软件包:

下列包是可选的。在默认配置的时候并不要求它们,但是如果打开了一些编译选项之后就需要它们了,如下文所解释的:

如果你正从Git树而不是使用发布的源代码包进行编译,或者你想做服务器端开发,那么你还需要下面的包:

还要检查一下你是否有足够的磁盘空间。你将大概需要近100MB用于存放编译过程中的源码树和大约20MB用于安装目录。一个空数据库集簇大概需要35MB。一个数据库所占的空间大约是存储同样数据的平面文件所占空间的五倍。如果你要运行回归测试,还临时需要额外的150MB。请用df命令检查剩余磁盘空间。

3.获取源码

gunzippostgresql-9.6.0.tar.gztarxfpostgresql-9.6.0.tar(如果你得到的是.bz2文件,请用bunzip2代替gunzip)。这样将在当前目录创建一个目录postgresql-9.6.0,里面是PostgreSQL源代码。进入这个目录完成安装过程的其他步骤。

你也可以直接从版本控制库中获得源代码.

4.安装过程

1.配置

安装过程的第一步就是为你的系统配置源代码树并选择你喜欢的选项。这个工作是通过运行configure脚本实现的,对于默认安装,你只需要简单地输入:

mkdirbuild_dircdbuild_dir/path/to/source/tree/configure[optionsgohere]make默认设置将编译服务器和辅助程序,还有只需要C编译器的所有客户端程序和接口。默认时所有文件都将安装到/usr/local/pgsql。

你可以通过给出下面的configure命令行选项中的一个或更多的选项来自定义编译和安装过程:

--prefix=PREFIX

把所有文件装在目录PREFIX中而不是/usr/local/pgsql中。实际的文件会安装到数个子目录中;没有一个文件会直接安装到PREFIX目录里。

如果你有特殊需要,你还可以用下面的选项自定义不同的子目录的位置。不过,如果你把这些设置保留默认,那么安装将是可重定位的,意思是你可以在安装过后移动目录(man和doc位置不受此影响)。

对于可重定位的安装,你可能需要使用configure的--disable-rpath选项。还有,你需要告诉操作系统如何找到共享库。

--exec-prefix=EXEC-PREFIX

--bindir=DIRECTORY

为可执行程序指定目录。默认是EXEC-PREFIX/bin,通常也就是/usr/local/pgsql/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自带的手册页将安装到这个目录,它们被安装在相应的manx子目录里。默认是DATAROOTDIR/man。

--docdir=DIRECTORY

设置安装文档文件的根目录,"man"页不包含在内。这只为后续选项设置默认值。这个选项的默认值为DATAROOTDIR/doc/postgresql。

--htmldir=DIRECTORY

PostgreSQL的HTML格式的文档将被安装在这个目录中。默认值为DATAROOTDIR。

Note:为了让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-extra-version=STRING

把STRING追加到PostgreSQL版本号。例如,你可以使用它来标记从未发布的Git快照或者包含定制补丁(带有一个如gitdescribe标识符之类的额外版本号或者一个分发包发行号)创建的二进制文件。

--with-includes=DIRECTORIES

DIRECTORIES是一个冒号分隔的目录列表,这些目录将被加入编译器的头文件搜索列表中。如果你有一些可选的包(例如GNUReadline)安装在非标准位置,你就必须使用这个选项,以及可能还有相应的--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]

要使用这个选项,你需要一个GettextAPI的实现。见上文。

--with-pgport=NUMBER

--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来配合该选项。configure将会检查所需的头文件和库以确保你的GSSAPI安装足以让配置继续下去。

--with-krb-srvnam=NAME

默认的Kerberos服务主的名称(也被GSSAPI使用)。默认是postgres。通常没有理由改变这个值,除非你是一个Windows环境,这种情况下该名称必须被设置为大写形式POSTGRES。

--with-openssl

编译SSL(加密)连接支持。这个选项需要安装OpenSSL包。configure将会检查所需的头文件和库以确保你的OpenSSL安装足以让配置继续下去。

--with-pam

编译PAM(可插拔认证模块)支持。

--with-bsd-auth

编译BSD认证支持(BSD认证框架目前只在OpenBSD上可用)。

--with-ldap

为认证和连接参数查找编译LDAP支持(详见Section32.17和Section20.3.7)。在Unix上,这需要安装OpenLDAP包。在Windows上将使用默认的WinLDAP库。configure将会检查所需的头文件和库以确保你的OpenLDAP安装足以让配置继续下去。

--with-systemd

--without-readline

避免使用Readline库(以及libedit)。这个选项禁用了psql中的命令行编辑和历史,因此我们不建议这么做。

--with-libedit-preferred

更倾向于使用BSD许可证的libedit库而不是GPL许可证的Readline。这个选项只有在你同时安装了两个库时才有意义,在那种情况下默认会使用Readline。

--with-bonjour

编译Bonjour支持。这要求你的操作系统支持Bonjour。在OSX上建议使用。

--with-uuid=LIBRARY

使用指定的UUID库编译uuid-ossp模块(提供生成UUID的函数)。LIBRARY必须是下列之一:

--with-ossp-uuid

--with-libxml

编译libxml(启用SQL/XML支持)。这个特性需要Libxml版本2.6.23及以上。

Libxml会安装一个程序xml2-config,它可以被用来检测所需的编译器和链接器选项。如果能找到,PostgreSQL将自动使用它。要制定一个非常用的libxml安装位置,你可以设置环境变量XML2_CONFIG指向xml2-config程序所属的安装,或者使用选项--with-includes和--with-libraries。

--with-libxslt

编译xml2模块时使用libxslt。xml2依赖这个库来执行XML的XSL转换。

--disable-integer-datetimes

--disable-float4-byval

禁用float4值的"传值",导致它们只能被"传引用"。这个选项会损失性能,但是在需要兼容使用C编写并使用"version0"调用规范的老用户定义函数时可能需要这个选项。更好的长久解决方案是将任何这样的函数更新成使用"version1"调用规范。

--disable-float8-byval

--with-segsize=SEGSIZE

--with-blocksize=BLOCKSIZE

设置块尺寸,以K字节计。这是表内存储和I/O的单位。默认值(8K字节)适合于大多数情况,但是在特殊情况下可能其他值更有用。这个值必须是2的幂并且在1和32(K字节)之间。注意修改这个值需要一次initdb。

--with-wal-segsize=SEGSIZE

设置WAL段尺寸,以M字节计。这是WAL日志中每一个独立文件的尺寸。调整这个值来控制传送WAL日志的粒度非常有用。默认尺寸为16M字节。这个值必须是2的幂并且在1到64(M字节)之间。注意修改这个值需要一次initdb。

--with-wal-blocksize=BLOCKSIZE

设置WAL块尺寸,以K字节计。这是WAL日志存储和I/O的单位。默认值(8K字节)适合于大多数情况,但是在特殊情况下其他值更好有用。这个值必须是2的幂并且在1到64(K字节)之间。注意修改这个值需要一次initdb。

--disable-spinlocks

即便PostgreSQL对于该平台没有CPU自旋锁支持,也允许编译成功。自旋锁支持的缺乏会导致较差的性能,因此这个选项只有当编译终端或者通知你该平台缺乏自旋锁支持时才应被使用。如果在你的平台上要求使用该选项来编译PostgreSQL,请将此问题报告给PostgreSQL的开发者。

--disable-thread-safety

禁用客户端库的线程安全性。这会阻止libpq和ECPG程序中的并发线程安全地控制它们私有的连接句柄。

--with-system-tzdata=DIRECTORY

这个选项主要针对那些很了解他们的目标操作系统的二进制包发布者。使用这个选项主要优点是不管何时当众多本地夏令时规则之一改变时,PostgreSQL包不需要被升级。另一个优点是如果时区数据库文件在安装时不需要被编译,PostgreSQL可以被更直接地交叉编译。

--without-zlib

避免使用Zlib库。这样就禁用了pg_dump和pg_restore中对压缩归档的支持。这个选项只适用于那些没有这个库的少见的系统。

--enable-debug

把所有程序和库以带有调试符号的方式编译。这意味着你可以通过一个调试器运行程序来分析问题。这样做显著增大了最后安装的可执行文件的大小,并且在非GCC的编译器上,这么做通常还要关闭编译器优化,这些都导致速度的下降。但是,如果有这些符号的话,就可以非常有效地帮助定位可能发生问题的位置。目前,我们只是在你使用GCC的情况下才建议在生产安装中使用这个选项。但是如果你正在进行开发工作,或者正在使用beta版本,那么你就应该总是打开它。

--enable-coverage

如果在使用GCC,所有程序和库都会用代码覆盖率测试工具编译。在运行时,它们会在编译目录中生成代码覆盖率度量的文件。这个选项只用于GCC以及做开发工作时。

--enable-profiling

如果在使用GCC,所有程序和库都被编译成可以进行性能分析。在后端退出时,将会创建一个子目录,其中包含用于性能分析的gmon.out文件。这个选项只用于GCC和做开发工作时。

--enable-cassert

打开在服务器中的assertion检查,它会检查许多"不可能发生"的条件。它对于代码开发的用途而言是无价之宝,不过这些测试可能会显著地降低服务器的速度。并且,打开这个测试不会提高你的系统的稳定性!这些断言检查并不是按照严重性分类的,因此一些相对无害的小故障也可能导致服务器重启—只要它触发了一次断言失败。目前,我们不推荐在生产环境中使用这个选项,但是如果你在做开发或者在使用beta版本的时候应该打开它。

--enable-depend

--enable-dtrace

为PostgreSQL编译对动态跟踪工具DTrace的支持。

要指向dtrace程序,必须设置环境变量DTRACE。这通常是必需的,因为dtrace通常被安装在/usr/sbin中,该路径可能不在搜索路径中。

dtrace程序的附加命令行选项可以在环境变量DTRACEFLAGS中指定。在Solaris上,要在一个64位二进制中包括DTrace,你必须为configure指定DTRACEFLAGS="-64"。例如,使用GCC编译器:

./configureCC='gcc-m64'--enable-dtraceDTRACEFLAGS='-64'...使用Sun的编译器:

./configureCC='/opt/SUNWspro/bin/cc-xtarget=native64'--enable-dtraceDTRACEFLAGS='-64'...--enable-tap-tests

启用PerlTAP工具进行测试。这要求安装了Perl以及Perl模块IPC::Run。

如果你喜欢用那些和configure选取的不同的C编译器,那么你可以你的环境变量CC设置为你选择的程序。默认时,只要gcc可以使用,configure将选择它,或者是该平台的默认(通常是cc)。类似地,你可以用CFLAGS变量覆盖默认编译器标志。

你可以在configure命令行上指定环境变量,例如:

./configureCC=/opt/bin/gccCFLAGS='-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还是Python3(或者是隐式选择)决定了PL/Python语言的哪一种变种将成为可用的。

TCLSH

Tcl解释器的全路径。这将被用来决定编译PL/Tcl时的依赖性,并且它将被替换到Tcl脚本中。

XML2_CONFIG

用于定位libxml安装的xml2-config程序。

Note:在开发服务器内部代码时,我们推荐使用配置选项--enable-cassert(它会打开很多运行时错误检查)和--enable-debug(它会提高调试工具的有用性)。

如果在使用GCC,最好使用至少-O1的优化级别来编译,因为不使用优化(-O0)会禁用某些重要的编译器警告(例如使用未经初始化的变量)。但是,非零的优化级别会使调试更复杂,因为在编译好的代码中步进通常将不能和源代码行一一对应。如果你在尝试调试优化过的代码时觉得困惑,将感兴趣的特定文件使用-O0编译。一种简单的方式是传递一个选项给make:makePROFILE=-O0file.o。

2.编译

要开始编译,键入:

make(一定要记得用GNUmake)。依你的硬件而异,编译过程可能需要5分钟到半小时。显示的最后一行应该是:

AllofPostgreSQLsuccessfullymade.Readytoinstall.如果你希望编译所有能编译的东西,包括文档(HTML和手册页)以及附加模块(contrib),这样键入:

makeworld显示的最后一行应该是:

PostgreSQL,contrib,anddocumentationsuccessfullymade.Readytoinstall.3.回归测试

如果你想在安装文件前测试新编译的服务器,那么你可以在这个时候运行回归测试。回归测试是一个用于验证PostgreSQL在你的系统上是否按照开发人员设想的那样运行的测试套件。键入:

4.安装文件

Note:如果你正在升级一套现有的系统,请阅读Section18.6其中有关于升级一个集簇的指导。

要安装PostgreSQL,输入:

makeinstall这条命令将把文件安装到在step1中指定的目录。确保你有足够的权限向该区域写入。通常你需要用root权限做这一步。或者你也可以事先创建目标目录并且分派合适的权限。

要安装文档(HTML和手册页),输入:

makeinstall-docs如果你按照上面的方法编译了所有东西,输入:

makeinstall-world这也会安装文档。

你可以使用makeinstall-strip代替makeinstall,在安装可执行文件和库文件时把它们剥离。这样将节约一些空间。如果你编译时带着调试支持,那么抽取将有效地删除调试支持,因此我们应该只是在不再需要调试的时候做这些事情。install-strip力图做一些合理的工作来节约空间,但是它并不了解如何从可执行文件中抽取每个不需要的字节,因此,如果你希望节约所有可能节约的磁盘空间,那么你可能需要手工做些处理。

标准的安装只提供客户端应用开发和服务器端程序开发所需的所有头文件,例如用C写的定制函数或者数据类型(在PostgreSQL8.0之前,后者需要独立地执行一次makeinstall-all-headers命令,不过现在这个步骤已经融合到标准的安装步骤中)。

只安装客户端:.如果你只想装客户应用和接口,那么你可以用下面的命令:

make-Csrc/bininstallmake-Csrc/includeinstallmake-Csrc/interfacesinstallmake-Cdocinstallsrc/bin中有一些服务器专用的二进制文件,但是它们很小。

卸载:.要撤销安装可以使用命令makeuninstall。不过这样不会删除任何创建出来的目录。

清理:.在安装完成以后,你可以通过在源码树里面用命令makeclean删除编译文件。这样会保留configure程序生成的文件,这样以后你就可以用make命令重新编译所有东西。要把源码树恢复为发布时的状态,可用makedistclean命令。如果你想从同一棵源码树上为多个不同平台制作,你就一定要运行这条命令并且为每个编译重新配置(另外一种方法是在每种平台上使用一套独立的编译树,这样源代码树就可以保留不被更改)。

如果你执行了一次制作,然后发现你的configure选项是错误的,或者你修改了任何configure所探测的东西(例如,升级了软件),那么在重新配置和编译之前运行一下makedistclean是个好习惯。如果不这样做,你修改的配置选项可能无法传播到所有需要变化的地方。

5.安装后设置

5.1.共享库

在一些有共享库的系统里,你需要告诉你的系统如何找到新安装的共享库。那些并不是必须做这个工作的系统包括FreeBSD、HP-UX、Linux、NetBSD、OpenBSD和Solaris。

设置共享库的搜索路径的方法因平台而异,但是最广泛使用的方法是设置环境变量LD_LIBRARY_PATH,例如在Bourneshells(sh、ksh、bash、zsh)中:

LD_LIBRARY_PATH=/usr/local/pgsql/libexportLD_LIBRARY_PATH或者在csh或tcsh中:

在有些系统上,更好的方法可能是在编译之前设置环境变量LD_RUN_PATH。

在Cygwin上,把库目录放在PATH中或者把.dll文件移动到bin目录。

如果有疑问,请参考你的系统的手册页(可能是ld.so或rld)。如果稍后你收到下面这样的消息:

如果你用的系统是Linux,并且你还有root权限,那么你可以在安装之后运行:

/sbin/ldconfig/usr/local/pgsql/lib(或者等效的目录)以便让运行时链接器更快地找到共享库。请参考ldconfig的手册页获取更多信息。在FreeBSD、NetBSD和OpenBSD上,命令是:

/sbin/ldconfig-m/usr/local/pgsql/lib我们不知道其它的系统有等效的命令。

5.2.环境变量

如果你安装到/usr/local/pgsql或者其他默认不在搜索路径中的地方,那你应该在你的PATH环境变量里面增加一个/usr/local/pgsql/bin(或者是你在step1时给选项--bindir设置的任何值)。严格来说,这些都不是必须的,但这么做可以让你使用PostgreSQL更方便。

要做这些事情,把下面几行加到你的shell启动文件,如~/.bash_profile(如果想影响所有用户就放在/etc/profile):

PATH=/usr/local/pgsql/bin:$PATHexportPATH如果你用的是csh或者tcsh,那么用这条命令:

setpath=(/usr/local/pgsql/bin$path)为了让你的系统找得到man文档,你需要加类似下面的一行到一个shell启动文件里(除非你安装到了默认搜索的位置):

MANPATH=/usr/local/pgsql/share/man:$MANPATHexportMANPATH环境变量PGHOST和PGPORT为客户端应用指定了数据库服务器的主机和端口,它们会覆盖编译时的默认项。如果你想从远程运行客户端应用,那么为每个准备使用该数据库的用户都设置PGHOST将会非常方便。但这不是必须的,而且大部分客户端程序也可以通过命令行选项替换这些设置。

6.平台支持

如果代码包含规定要工作在一个平台(即一种CPU架构和操作系统的结合)上并且它最近已经被验证能在该平台上编译并通过其回归测试,PostgreSQL开发社区才会认为该平台是被支持的。目前,大部分平台兼容性的测试都是由PostgreSQL编译农场的测试机器自动完成的。如果你对在一个并没有出现在编译农场中的平台上运行PostgreSQL感兴趣,但是代码确实能够工作或者能被修改得工作,我们强烈鼓励你建立一个编译农场成员机器,这样进一步的兼容性可以被确认。

通常,PostgreSQL被期望能在这些CPU架构上工作:x86、x86_64、IA64、PowerPC、PowerPC64、S/390、S/390x、Sparc、Sparc64、ARM、MIPS、MIPSEL、M68K和PA-RISC。存在对M32R和VAX的代码支持,但是这些架构上并没有近期测试的报告。通常也可以在一个为支持的CPU类型上通过使用--disable-spinlocks配置来进行编译,但是性能将会比较差。

如果你在一个平台上有安装问题,并且该平台根据最近的编译农场结果已经可以被支持,请将问题报告给pgsql-bugs@postgresql.org。如果你有兴趣将PostgreSQL移植到一个新的平台,pgsql-hackers@postgresql.org是一个合适的讨论它的地方。

7.1.AIX

PostgreSQL能在AIX上工作,但是正确地安装它却富有挑战性。从4.3.3到6.1的AIX被认为是可支持的。你可以使用GCC或本地IBM编译器xlc。通常,使用最新版本的AIX和PostgreSQL能有所帮助。在编译农场中检查有关已知能工作的AIX版本的最新信息。

被支持的AIX版本的最小推荐修理级别是:

AIX4.3.3

MaintenanceLevel11+postML11bundle

AIX5.1

MaintenanceLevel9+postML9bundle

AIX5.2

TechnologyLevel10ServicePack3

AIX5.3

TechnologyLevel7

AIX6.1

BaseLevel

要检查你当前的修理级别,在AIX4.3.3至AIX5.2ML7中使用oslevel-r,或者在后面的版本中使用oslevel-s。

如果你已经在/usr/local中安装了Readline或libz,在你自己的选项之外使用下列configure标志:--with-includes=/usr/local/include--with-libraries=/usr/local/lib.

7.1.1.GCC问题

在AIX5.3上,使用GCC编译和运行PostgreSQL有一些问题。

你将要使用GCC继3.3.2之后的一个版本,特别是如果你在使用一个打包好的版本。我们在4.0.1上获得了成功。早期版本的问题看起来更多地与IBM打包的GCC有关,而非GCC真正的问题,因此如果你自己编译GCC,你更有可能使用早期版本的GCC取得成功。

7.1.2.Unix域套接字崩溃

AIX5.3有一个问题是sockaddr_storage定义得不够大。在版本5.3中,IBM增加了sockaddr_un(Unix域套接字的地址结构)的尺寸,但是没有相应地增加sockaddr_storage的尺寸。这样做的结果是在PostgreSQL中尝试使用Unix域套接字会导致libpq让该数据结构溢出。TCP/IP连接工作正常,但是Unix域套接字不行,这将使回归测试不能工作。

该问题已经被报告给了IBM,并且已被记录为缺陷报告PMR29657。如果你升级到maintenancelevel5300-03或更新,将会包括这个修复。一种快速的解决方法是把/usr/include/sys/socket.h中的_SS_MAXSIZE改成1025。在两种情况中,一旦你得到了修正过的头文件,你都需要重编译PostgreSQL。

7.1.3.Internet地址问题

PostgreSQL依赖系统的getaddrinfo函数来解析listen_addresses、pg_hba.conf等中的IP地址。旧版本的AIX在这个函数中有各种各样的缺陷。如果你存在与此有关的问题,更新到上文所示的合适的AIXfixlevel将会解决它。

一个用户报告:

当在AIX5.3上实现PostgreSQL版本8.1时,我们会周期性地碰到问题,在其中统计收集器会"神秘地"无法成功启动。这似乎是在IPv6实现中意外行为的结果。看起来PostgreSQL和IPv6无法和AIX5.3一起很好地工作。

下面任意一种动作都可以"修复"该问题。

(asroot)#ifconfiglo0inet6::1/0deletehosts=local,bind将其换成:

hosts=local4,bind4来使IPv6地址的搜索无效。

Warning

这实际上是对有关IPv6支持不成熟性的问题的一种变通方案,这在AIX5.3发布的过程中有了显著地改进。它可以和AIX5.3一起工作,但是不代表对此问题的一种华丽的解决方案。有报告称该变通方案不仅仅是多余的,还会在AIX6.1上导致问题,在AIX6.1中IPv6支持已变得更加成熟。

7.1.4.内存管理

AIX的特别之处在于它的内存管理。你可能有一个装备有好多个吉字节空闲RAM的服务器,但是在运行应用时仍然会得到内存不足或者地址空间错误。一个例子是createlang会因为罕见的错误失败。例如,作为PostgreSQL安装的拥有者运行:

-bash-3.00$createlangplperltemplate1createlang:languageinstallationfailed:ERROR:couldnotloadlibrary"/opt/dbs/pgsql748/lib/plperl.so":Amemoryaddressisnotintheaddressspacefortheprocess.作为拥有PostgreSQL安装的组中的非拥有者运行:

-bash-3.00$createlangplperltemplate1createlang:languageinstallationfailed:ERROR:couldnotloadlibrary"/opt/dbs/pgsql748/lib/plperl.so":Badaddress另一个例子是PostgreSQL服务器日志中的内存不足错误,每次内存分配接近或者超过256MB时都会失败。

所有这些问题的总体成因是服务器进程所用的寻址空间和内存模型。默认情况下,所有在AIX上编译的二进制都是32位。这并不依赖于硬件类型或使用的内核。这些32位进程被限制在4GB的内存中,并被使用几种模型之一安排成256MB的段。该默认值允许在堆中低于256MB,因为它和栈共享一个单独的段。

在createlang的例子中,检查你的umask和你的PostgreSQL安装中的二进制的权限。这个例子中涉及的二进制是32位的并且被用模式750而不是755安装。由于这种方式的权限设置,只有所有者或拥有组的成员可以载入该库。因为它不是所有人可读的,载入器将该对象放在进程的堆中而不是它应该被放入的共享库段中。

这个问题的"理想的"解决方案是使用PostgreSQL的64位编译,但是这不是总是实用的,因为有32位处理器的系统可以编译64位二进制但是却不能运行它。

如果想要一个32位二进制,在开始PostgreSQL服务器之前将LDR_CNTRL设置为MAXDATA=0xn0000000,其中1<=n<=8,并且尝试不同的值以及postgresql.conf设置来找一个能让你满意的配置。这种LDR_CNTRL的使用告诉AIX你希望服务器留出MAXDATA字节给堆,以256MB的段分配。当你找到了一个可工作的配置时,ldedit可以被用来修改二进制,这样它们默认使用想要的堆尺寸。PostgreSQL也可以被重新编译,传递configureLDFLAGS="-Wl,-bmaxdata:0xn0000000"来达到相同的效果。

对于一个64位编译,设置OBJECT_MODE为64并且传递CC="gcc-maix64"和LDFLAGS="-Wl,-bbigtoc"给configure(给xlc的选项可能不同)。如果你省略OBJECT_MODE的输出,你的编译可能会因为链接器错误而失败。当OBJECT_MODE被设置时,它告诉AIX的编译工具(如ar、as和ld)默认要处理哪些对象类型。

默认情况下,过量使用页面空间的情况可能会发生。不过我们还没有看到过,当进程用尽内存并且出现了过量使用时AIX会杀死进程。我们见到过的最接近于此的是fork失败,其原因是系统觉得已经没有足够的内存给另一个进程。和AIX的很多其他部分一样,如果这成为了一个问题,页面空间分配方法和耗尽内存导致的杀死在系统范围或进程范围是可以配置的。

参考和资源

"LargeProgramSupport",AIXDocumentation:GeneralProgrammingConcepts:WritingandDebuggingPrograms.

"ProgramAddressSpaceOverview",AIXDocumentation:GeneralProgrammingConcepts:WritingandDebuggingPrograms.

"PerformanceOverviewoftheVirtualMemoryManager(VMM)",AIXDocumentation:PerformanceManagementGuide.

"PageSpaceAllocation",AIXDocumentation:PerformanceManagementGuide.

"Paging-spacethresholdstuning",AIXDocumentation:PerformanceManagementGuide.

DevelopingandPortingCandC++ApplicationsonAIX,IBMRedbook.

7.2.Cygwin

PostgreSQL可以使用Cygwin来编译,它是用于Windows的一个类Linux环境,但是这种方法不如原生Windows编译(见Chapter17)并且我们已经不再推荐在Cygwin下运行一个服务器。

makeMAX_CONNECTIONS=5check(在某些系统上你可以有大约10个同时连接)。

可以把cygserverPostgreSQL服务器安装为WindowsNT服务。关于如何这样做的信息,请参考包含在Cygwin上PostgreSQL二进制包中的README文档。它被安装在目录/usr/share/doc/Cygwin中。

7.3.HP-UX

给定合适的系统补丁级别和编译工具,PostgreSQL7.3+应该可以工作在运行HP-UX10.X或11.X的Series700/800PA-RISC机器上。至少一个开发者例行地在HP-UX10.20上测试过,并且我们有在HP-UX11.00和11.11上成功安装的报告。

除了PostgreSQL源代码发布,你将需要GNUmake(HP的make不行),并且需要GCC或HP的ANSIC编译器。如果你想从Git源编译而不是一个发布包,你还将需要Flex(GNUlex)和Bison(GNUyacc)。我们还推荐确认你真的在使用最新的HP补丁。最低限度下,如果你在HP-UX11.11上编译64位二进制,你可能需要PHSS_30966(11.11)或一个后继补丁,否则initdb可能中止:

PHSS_30966s700_800ld(1)andlinkertoolscumulativepatch

如果你正在一台PA-RISC2.0机器上编译并且想让编译好的二进制运行在PA-RISC1.1机器上,你将需要在CFLAGS中指定+DAportable。

如果你正在一台HP-UXItanium机器上编译,你将需要最新的HPANSIC编译器,以及它的依赖补丁或后继补丁:

PHSS_30848s700_800HPCCompiler(A.05.57)PHSS_30849s700_800u2comp/be/pluginlibraryPatch

如果你同时有HP的C编译器和GCC的编译器,那么在运行configure时你可能希望显式地选择要使用的编译器:

./configureCC=cc用于HP的C编译器,或者

./configureCC=gcc用于GCC。如果你忽略这个设置,configure在可以选择时会使用gcc。

默认的安装目标位置是/usr/local/pgsql,你可能希望修改它为/opt之下的某个地方。如果是这样,使用configure的--prefix开关。

在回归测试中,在几何测试中可能会有某些低序位差别,这会根据你使用的编译器和数学库版本而变化。任何其他错误都需要怀疑。

7.4.MinGW/原生Windows

用于Windows的PostgreSQL可以使用MinGW编译,它是一个用于微软操作系统的类Unix的编译环境。也可以使用微软的VisualC++编译器套件来编译。MinGW编译使用本章中描述的正常编译系统;而VisualC++编译的工作完全不同并且在Chapter17中描述。后者是一种完全原生的编译并且没有像MinGW那样使用额外软件。在PostgreSQL的主网站上有一个现成的安装器可用。

在你安装完所有的东西之后,我们建议你在CMD.EXE下运行psql,因为MSYS控制台有缓冲问题。

7.4.1.在Windows上收集崩溃转储

7.5.SCOOpenServer和SCOUnixWare

PostgreSQL可以在SCOUnixWare7和SCOOpenServer5上编译。在OpenServer上,你可以使用OpenServerDevelopmentKit或UniversalDevelopmentKit。但是可能需要一些调整,如下所述。

7.5.1.Skunkware

对于UnixWare和OpenServer,Skunkware有不同的版本。请确保你为你的操作系统安装了正确的版本,除了以下需要注意的。

在UnixWare7.1.3及其以后,GCC被包括在UDKCD上作为GNUMake。

7.5.2.GNUMake

你需要使用GNUMake程序,它位于SkunkwareCD上。默认情况下,它作为/usr/local/bin/make安装。

对于UnixWare7.1.3及以上,GNUMake程序是UDKCD的OSTK部分,并且在/usr/gnu/bin/gmake中。

7.5.3.Readline

默认情况下,Readline安装到/usr/local/lib和/usr/local/include。但是,PostgreSQLconfigure程序在没有得到帮助的情况下将不能找到它。如果你安装了Readline,那么对configure使用下列选项:

./configure--with-libraries=/usr/local/lib--with-includes=/usr/local/include7.5.4.在OpenServer上使用UDK

如果你正在OpenServer上使用新的UniversalDevelopmentKit(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"7.5.5.阅读PostgreSQL手册页

默认情况下,PostgreSQL手册页被安装到/usr/local/pgsql/share/man。默认情况下,UnixWare不会在那里查看手册页。要能够阅读它们你需要修改/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/share/man在OpenServer上,某些额外的研究需要被覆盖来使得手册页可用,因为其手册系统与其他平台有点不同。当前,PostgreSQL将根本不会安装它们。

7.5.6.带7.1.1b特性补充的C99问题

对于那些早于随OpenUNIX8.0.0(UnixWare7.1.2)一起发布的编译器版本的编译器,它们包括7.1.1b特性补充,你可能需要在CFLAGS或CC环境变量中指定-Xb。这种问题的迹象是在编译引用内联函数的tuplesort.c时的一个错误。显然在7.1.2(8.0.0)及以后的编译器中已有修改。

7.5.7.UnixWare上的线程

对于线程,你必须在所有使用libpq的程序上使用-Kpthread。libpq使用pthread_*调用,这些只能在有-Kpthread/-Kthread标志的情况下可用。

7.6.Solaris

PostgreSQL在Solaris上得到了很好的支持。你的操作系统越新,你将会碰到更少的问题;细节如下。

7.6.1.要求的工具

你可以使用GCC或Sun的编译器套件进行编译。为了更好的代码优化,我们强烈推荐在SPARC架构下使用Sun的编译器。我们已经得到一些使用GCC2.95.1时的问题报告;我们推荐GCC2.95.3或之后的版本。如果你正在使用Sun的编译器,注意不要选择/usr/ucb/cc;而是使用/opt/SUNWspro/bin/cc。

7.6.2.OpenSSL的问题

当你编译PostgreSQL带有OpenSSL支持时,你可能在下列文件中得到编译错误:

这是由于标准/usr/include/crypt.h头部和OpenSSL提供的头文件之间的一个名字空间冲突导致的。

升级你的OpenSSL安装到版本0.9.6a来修复这个问题。Solaris9及以上有一个更新版本的OpenSSL。

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

如果configure抱怨一个失败的测试程序,可能的情况是运行时链接器无法找到某些库,可能是libz、libreadline或某些其他非标准库如libssl。要向它指出正确的位置,在configure命令行上设置LDFLAGS环境变量,例如:

configure...LDFLAGS="-R/usr/sfw/lib:/opt/sfw/lib:/usr/local/lib"更多信息可见ld手册页。

7.6.4.64-位编译有时会崩溃

在Solaris7和更老的版本上,64-位版本的libc有一个有缺陷的vsnprintf例程,这导致PostgreSQL中不稳定的核心转储。最简单的已知解决方案是强制PostgreSQL使用它自己的vsnprintf版本而不是库中的拷贝。要这样做,运行configure之后编辑一个由configure产生的文件:在文件src/Makefile.global中将行

LIBOBJS=改成

LIBOBJS=snprintf.o(可能有其他文件已经被列在这个变量中。顺序无影响)。然后正常编译。

7.6.5.为最优性能编译

如果你没有理由要使用SPARC上的64位二进制,最好用32位版本。64位操作较慢并且64位二进制比其32位变体要慢。并且在另一方面,AMD64CPU家族上的32位代码不是原生的,并且这也是问什么在这个CPU族中32位代码要明显地更慢。

7.6.6.用DTrace来跟踪PostgreSQL

如果你看到postgres可执行程序的链接中断并且报出下面的错误消息:

UndefinedfirstreferencedsymbolinfileAbortTransactionutils/probes.oCommitTransactionutils/probes.old:fatal:Symbolreferencingerrors.Nooutputwrittentopostgrescollect2:ldreturned1exitstatusmake:***[postgres]Error1说明你的DTrace安装太旧,无法处理静态函数中的探测。你需要Solaris10u4或更新的版本。

THE END
1.重庆大学开源软件镜像站重庆大学开源软件镜像站,致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务,帮助用户更方便地获取开源软件。本镜像站由重庆大学蓝盟负责维护。http://mirrors.cqu.edu.cn/
2.2024年fill.cnn研究所实验室官最新动态与发展趋势!随着科技的飞速发展,各大科研机构纷纷加快了数字化建设步伐,fill.cnn研究所实验室官网也在这一趋势中不断推陈出新,成为业内关注的焦点。作为一家专注于人工智能、计算机视觉和数据分析的研究机构,fill.cnn研究所通过不断优化官网平台,提供了更为便捷的信息获取渠道和最新的科研成果发布。本文将详细探讨2024年fill.cnnhttp://www.wanmengdianlan.com/wanmengdianlan3/25296e74d0.html
3.Serverkonfiguration:ADRrenaretr?dantalF?rklarar konfigurationsinst?llningen f?r SQL Server-instansen f?r ADR-renare tr?dantal.https://learn.microsoft.com/sv-se/sql/database-engine/configure-windows/adr-cleaner-thread-count-configuration-option
4.轻量级PR:website更新·PullRequest!66871If your Pull Request has already been developed, you can leave a "start build" comment to trigger the gated system. For more commands, please visit OpenHarmony Command List. If you need to change the subscription of a Pull Request or Issue, please visit the link. 表态 回复 openharmony_cihttps://toscode.mulanos.cn/openharmony/docs/pulls/66871
5.谷歌2024年12月核心算法更新:深度解析与响应策略谷歌搜索算法的每次更新都会对全球数百万网站的排名、流量和可见性产生必然的影响。 2024年12月的核心算法更新继承了谷歌不断优化搜索体验的战略,旨在进一步提高搜索结果的质量,尤其是对用户搜索意图和网站内容质量的精准匹配作为。站长和SEO从业者,了解这一更新的细节和应对策略,对于网站优化和流量增长至关重要https://www.jzyseo.com/en/googles-december-2024-core-algorithm-update-in-depth-analysis-and-response-strategies/
6.openmindPreviewWordPressThemeWordPress.orgHongKongOpenmind is a versatile and visually stunning WordPress… 下載 openmind.1.6.zip Style variations Style: Default Style: green Style: orange Style: red Patterns Pattern: 404 Pattern: Contact Us Pattern: Front Page Pattern: Index Pattern: Integrations Pattern: Main Pattern: Service Numbehttps://zh-hk.wordpress.org/themes/openmind/preview/?style_variation=green
7.环球新闻wordpress主题博客主题下载导读:这是MoreNews的一个儿童主题。版本1.0.0最后更新2024年11月18日活动安装少于10WordPress版本5.3PHP版本5.6主题主页GlobalNews是一个时尚、 这是MoreNews的一个儿童主题。 版本1.0.0 最后更新2024年11月18日 活动安装少于10 WordPress版本5.3 PHP版本5.6 主题主页 GlobalNews是一个时尚、高性能的WordPress主题http://wpeu.cn/post/11936.html
8.加拿大国际治理创新中心(CIGI):2024年数据治理在释放数据价值中的加拿大国际治理创新中心(CIGI):2024年数据治理在释放数据价值中的作用报告(英文版),该报告大小为6.42MB,报告文档格式为pdf,一共104页。https://www.bootwiki.com/info/460ae0b6c1dd4cf991fa3e410ca17a69
9.Zlib回归!书虫狂欢 更令人振奋的是,Zlibrary 的客户端也已经上线,再也不用到处寻找入口了。目前有三个版本可供选择,分别适用于 Windows、Mac 和安卓手机。这真是太方便了! 另外,Zlibrary 的最新网址也可以通过浏览器直接访问,让阅读变得更加简单快捷!快来体验吧!0 0https://mbd.baidu.com/newspage/data/dtlandingsuper?nid=dt_4472336526729322786
10.Winki专栏易百纳技术社区openEuler Embedded 的 CI 会归档最新的构建镜像。若希望快速获取可用的镜像,请访问 dailybuild ,在 根据相关爆料,将要回归的麒麟芯片并非旗舰平台,良率爬坡中。华为Mate60系列旗舰手机,会是书写这一历史4.mtd-utils依赖以下几个库,以ubuntu为例,安装方式参考下面命令:sudo apt-get install zlib1g-dev https://www.ebaina.com/blog/article/200000100051?limit=20
11.@弗拉基米尔@ 弗拉基米尔-普京,要是zlib以zlib.ru回归舆论战就直接反败为胜了 ?收藏 转发 评论 ?3 评论 o p 同时转发到我的微博 按热度 按时间 正在加载,请稍候 ü 简介: 空想家序列9的虚拟人格:在地狱听地狱笑话笑了会去哪里/七神默许,愚者反对 更多a 微关系 她的关注(https://weibo.com/2275084542/MdxmQm1XG
12.Zlibrary官方正式回归!所以在国内,上个月还在过年的时候,通过 IPFS + zlib.app 就成了当时主流的下载姿势。 到这里,关于 Z-lib 「退网」后的故事就盘完了,现在 Z-lib 回归了,又有什么变化呢? 有的,在正式回归明网前,Z-lib 免费为捐助过的用户提供了两个私人的公网地址,而正式回归后,普通用户也会拥有两个私人的公网地址。 https://blog.csdn.net/techforward/article/details/129164002
13.开yun体育官网入口登录APP下载官方版1.【红利达到8888元】开yun体育app官网入口网页版下载官网-APP下载支持:winall/win7/win10/win11系统类型:开yun体育app官网入口网页版下载下载(2024全站)最新版本IOS/安卓官方入口V2.97.2994(安全平台)登录入口《开yun体育app官网入口网页版下载》是一款2015幻想半Q版arpg手游新作,并在游戏中融入了http://www.hfhssj.com/hfhss/16596.html
14.华硕b550mbiosflbk华硕b550mbios0204抛开以上种种问题, 回归本质, 请在BIOS中关闭Secure Boot 接下来就简单多了 通过软件中心搜索并安装VirtualBox, 版本: 6.1.10_Ubuntu r138449 从VirtualBox官网下载对应的6.1.10版本的扩展包, 双击安装上即可 USB访问: sudo addgroupmyusernamevboxusers https://blog.51cto.com/u_16213722/9250992
15.四万字硬刚KuduKudu基础原理实践小总结腾讯云开发者社区在内存中对每个Tablet分区维护一个MemRowSet来管理最新更新的数据,默认是1G刷新一次或者是2分钟。后Flush到磁盘上形成DiskRowSet,多个DiskRowSet在适当的时候进行归并处理。 和HBase采用的LSM(LogStructured Merge,很难对数据进行特殊编码,所以处理效率不高)方案不同的是,Kudu对同一行的数据更新记录的合并工作,不是在https://cloud.tencent.com/developer/article/1880339
16.满血复活的Z而下载时,它会先调用官方接口,然后再走Zlib App的下载线路,而且由于是公共账号,所以下载也没有限制。 2.2、Anna's Archive 在Z-library 关站之前,有一个叫Anna的网友爬取了 Z-library 上的所有资源。 原因是 Z-library 起源于Libgen,但她认为 Z-library后续新增内容却不回流Libgen 的做法,不利于知识传播。 https://limzero.com/z-library-book-resource.html
17.RTTOV12.2(RadiativeTransferforTOVS)研究环境搭建(一)onRTTOV v12 官网https://www.nwpsaf.eu/site/software/rttov/rttov-v12/ RTTOV 是EUMETSAT(European笔者使用的是自己的win10微机上通过UWP应用商店下载的最新的Ubuntu长期维护版本 Ubuntu LTS 18.04。强烈也就是通过机器学习生成的回归架构的因子和回归系数(当然学习的样本是通过物理模型计算得到的)在快速https://www.jianshu.com/p/1c2a771a2eca
18.使用ZLIB库压缩解压源码(支持多级文件目录压缩和解压)开发技术这个资源原本是下载自:论坛的yangyou2009 的资源“使用ZLIB库压缩解压源码”,地址是:http://download./detail/yangyou2009/2605729 修改了其中一个bug,他在解有压缩的有多目录的zip文件时,解压之后文件夹目录不对。 这里特别感谢yangyou2009,我在其中学习了很多东西。https://www.coder100.com/index/index/content/id/1721100
19.强大且实用的资源网站推荐,让你事半功倍!Github编程最近,我在互联网的海洋中潜心寻找,发现了几个非常强大且实用的资源网站。无论是学习、工作,还是生活,这些网站都能为你提供无尽的便利与帮助。今天,就让我来一一介绍这些宝藏地址,让你在获取信息的时候省时又省力。 第一个推荐的网站是http://www.watchpg.com/。在这个网站上,你可以找到关于钟表维修的丰富信息。https://www.sohu.com/a/838907049_121814835
20.继续看书吗?ZLIB电子书2024.01更新ZLIBRARY回归ZLIB电子书-2024.01 更新 ZLIBRARY 回归 Kindle 马上就要退出中国市场了,已经入手的Kindle怎么办?当做泡面桶上的盖子,还是咋办? 抓住最后的时间,多下载点内容吧! 网上有很多介绍各种网站的帖子,说实话也不是都好用,有的还挺费事。 亚马逊官网免费下载,就不说了,自己搜索就行,但是免费的,几乎都不是你想要看的。https://zhuanlan.zhihu.com/p/543080424