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

本文档详细介绍了在多种操作系统上从源代码编译安装PostgreSQL 9.6.0的过程。内容涵盖所需软件包、编译环境配置、编译选项以及解决特定平台(如AIX、Cygwin、HP-UX、MinGW/Windows、SCO OpenServer和UnixWare)上可能出现的问题。此外,还提到了如本地语言支持、SSL连接、认证机制等可选功能的编译要求。
摘要由CSDN通过智能技术生成

本文档为PostgreSQL 9.6.0文档,本转载已得到原译者彭煜玮授权。

1. 简单版

./configure
make
su
make 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

本章剩余部分都是完全版。

2. 要求

一般说来,一个现代的与 Unix 兼容的平台应该就能运行PostgreSQL。 到发布为止已经明确测试过的平台的列表在 Section 16.6中列出。在发布的doc子目录里面有许多平台相关的 FAQ文档,如果你碰到问题你可能会需要参考它们。

编译PostgreSQL需要下列软件包:

  • 要求GNU make版本3.80或以上;其他的make程序或更老的GNU make版本将不会工作(GNU make有时以名字gmake安装)。要测试GNU make可以输入:
make --version
  • 你需要一个ISO/ANSI C 编译器(至少是 C89兼容的)。我们推荐使用最近版本的GCC,不过,众所周知的是PostgreSQL可以利用许多不同厂商的不同编译器进行编译。
  • 除了gzip和bzip2之外,我们还需要tar来解包源代码发布。
  • 默认时将自动使用GNU Readline库。它允许psql(PostgreSQL的命令行 SQL 解释器)记住你输入的每一个命令并且允许你使用箭头键来找回和编辑之前的命令。如果你不想用它,那么你必需给configure声明--without-readline选项。作为一种可选方案,你常常可以使用 BSD许可证的libedit库,它最初是在NetBSD上开发的。libedit库是GNU Readline兼容的, 如果没有发现libreadline或者configure使用了--with-libedit-preferred选项,都会使用这个库。如果你使用的是一个基于包的 Linux 发布,那么要注意你需要readline和readline-devel两个包,特别是如果这两个包在你的版本里是分开的时候。
  • 默认的时候将使用zlib压缩库。 如果你不想使用它,那么你必须给configure声明--without-zlib选项。使用这个选项关闭了在pg_dump和pg_restore中对压缩归档的支持。

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

  • 要编译服务器端编程语言PL/Perl,你需要一个完整的 Perl安装, 包括libperl 库和头文件。因为PL/Perl是一个共享库, libperl库在大多数平台上也必须是一个共享库。最近的版本的 Perl好像已经默认这样做了,但是早先的版本可不是 这样的, 而且这总是一种在站点上安装 Perl 的选择。如果选择了编译 PL/Perl但是它却找不到一个共享的 libperl,那么configure将会失败。 在这种情况下,你将不得不重新手工编译并且安装Perl 以便能编译PL/Perl。在 Perl的配置处理过程中,需要一个共享库。
  • 如果你想更多地使用PL/Perl, 你应当保证Perl安装在编译时启用了 usemultiplicity选项(perl -V将会显示是否是这样)。
  • 要编译PL/Python服务器端编程语言, 你需要一个Python的安装,包括头文件和distutils模块。最低的版本要求是Python 2.3(要和类型numeric的函数参数一起工作,2.3.x 安装必须包括独立可用的cdecimal模块,注意如果缺少它PL/Python回归测试就无法通过)。
  • 因为PL/Python将以共享库的方式编译, libpython库在大多数平台上也必须是一个共享库。 在默认的从源码安装Python时不是这样的, 而是在很多操作系统发布中有一个共享库可用。如果选择了编译 PL/Python但找不到一个共享的 libpython,configure将 会失败。这可能意味着你不得不安装额外的包或者(部分)重编译 Python安装以提供这个共享库。 在从源码编译时,请用--enable-shared标志运行 Python的配置脚本。
  • 如果你想编译PL/Tcl过程语言, 你当然需要安装Tcl,要求的最低版本是 Tcl 8.4。
  • 要打开本地语言支持(NLS),也就是说, 用英语之外的语言显示程序的消息,你需要一个Gettext API的实现。有些操作系统内置了这些(例如Linux、NetBSD、Solaris), 对于其它系统,你可以从http://www.gnu.org/software/gettext/ 下载一个额外的包。如果你在使用GNU C 库里面的Gettext实现, 那么你就额外需要GNU Gettext包,因为我们需要里面的几个工具程序。对于任何其它的实现,你应该不需要它。
  • 如果你想支持使用Kerberos、OpenSSL、OpenLDAP和/或PAM的认证或者加密,那你需要相应的包。
  • 要编译PostgreSQL文档,有一些独立的要求集 。

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

  • 如果你需要从 Git 检出中编译,或者你修改了实际的扫描器和分析器的定义文件, 那么你需要 GNU Flex和Bison。 如果你需要它们,那么确保自己拿到的是Flex 2.5.31 或更新的版本, 以及Bison 1.875 或者更新的版本。不能使用其他lex和yacc程序。
  • 如果需要从 Git 检出中编译,或者你修改了任何使用 Perl 脚本的编译步骤的输入文件,那么你需要Perl 5.8或以后的版本。如果你在 Windows 上编译,你在任何情况下都需要Perl。运行一些测试套件时也需要Perl。

如果你需要获取GNU包,你可以在你的本地GNU镜像站点 (看看 http://www.gnu.org/order/ftp.html 或 ftp://ftp.gnu.org/gnu/ 找到它们。

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

3. 获取源码

PostgreSQL 9.6.0 源代码可以从我们的官方网站 http://www.postgresql.org/download/ 的下载区中获得。你将得到一个名为postgresql-9.6.0.tar.gz或postgresql-9.6.0.tar.bz2的文件。在你获取文件之后,解压缩它:


gunzip postgresql-9.6.0.tar.gz
tar xf postgresql-9.6.0.tar

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

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

4. 安装过程

1.配置

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


./configure

该脚本将运行一些测试来决定一些系统相关的变量, 并检测你的操作系统的特殊设置,并且最后将在编译树中创建一些文件以记录它找到了什么。如果你想保持编译目录的独立,你也可以在一个源码树之外的目录中运行configure 。这个过程也被称为一个VPATH编译。做法如下:


mkdir build_dir
cd build_dir
/path/to/source/tree/configure [options go here]
make

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

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

--prefix=PREFIX

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

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

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

--exec-prefix=EXEC-PREFIX

你可以把体系相关的文件安装到一个不同的前缀下(EXEC-PREFIX),而不是PREFIX中设置的地方。 这样做可以比较方便地在不同主机之间共享体系相关的文件。 如果你省略这些,那么EXEC-PREFIX就会被设置为等于 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 快照或者包含定制补丁(带有一个如git describe标识符之类的额外版本号或者一个分发包发行号)创建的二进制文件。

--with-includes=DIRECTORIES

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

例子:--with-includes=/opt/gnu/include:/usr/sup/include.

--with-libraries=DIRECTORIES

DIRECTORIES是一个冒号分隔的目录列表,这些目录是用于查找库文件的。 如果你有一些包安装在非标准位置,你可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值