官方地址:https://www.postgresql.org,中文地址:http://www.postgres.cn/index.php/home
官方下载地址:https://www.postgresql.org/ftp/source/
官方中文文档:http://www.postgres.cn/docs/9.6/index.html
本人仅介绍PostgreSQL的源码安装,其他的安装方式(YUM安装),请参考:https://www.postgresql.org/download/linux/redhat/
一、依赖软件(依赖包)
1、GNU Make 的版本 >= 3.80 (必需)
可用使用 # make –version 查看当前版本。
2、GCC编译 (必需)
3、readline、readline-devel (必需)
安装PSQL的命令行,依赖该包,推荐安装命令行。
# yum install -y readline.x86_64 readline-devel.x86_64
4、zlib (必需)
在PSQL中pg_dump和pg_restort中压缩文档需要用到该包。
# yum install -y zlib.x86_64 zlib-devel.x86_64
5、Perl版本 >= Perl 5.8.3
需要编译服务器端编程语言PL/Perl,需要安装该包。可使用Perl -v 查看版本。
tips : 编译Perl后,需要确保编译时启用了 usemultiplicity选项。
6、Python 2.4。支持Python 3
需要编译PL/Python服务器端编程语言。可使用 python –version 查看版本。
# yum install -y python.x86_64
7、Tcl版本 >= 8.4
Tcl (最早称为“工具命令语言””Tool Command Language”, 但是目前已经不是这个含义,不过我们仍然称呼它为TCL)是一种脚本语言。 由John Ousterhout创建。 TCL很好学,功能很强大。TCL经常被用于 快速原型开发,脚本编程, GUI和测试等方面。
# yum install -y tclx.x86_64 tclx-devel.x86_64
8、 Gettext API
启用 Native Language Support (NLS:本地语言,即除英语外的语言) 时,需要使用。一般情况下(如Linux 、NetBSD、Solaris)是系统内置,如果非内置,则去 http://www.gnu.org/software/gettext/ 下载。
9、Openssl 版本 >= 0.9.8
启用客户端加密传输,需要使用该包。可使用 # openssl version 查看版本。
# yum install -y openssl.x86_64 openssl-devel.x86_64
10、Kerberos, OpenLDAP, PAM
启用身份验证,需要使用以上包。
二、configure配置
选项 | 说明 | 默认 | 是否安装 |
---|---|---|---|
–prefix=PREFIX | 安装路径 | /usr/local/pgsql | 建议 |
–exec-prefix=EXEC-PREFIX | pgsql系统架构文件目录,而不是PREFIX中设置的地方。 这样做可以比较方便地在不同主机之间共享体系相关的文件。 | 和prefix一致 | 不建议 |
–bindir=DIRECTORY | 为可执行程序指定目录 | exec-prefix/bin | 不建议 |
–sysconfdir=DIRECTORY | 用于各种各样配置文件的目录 | prefix/etc | 一般情下不建议 |
–libdir=DIRECTORY | 设置安装库和动态装载模块的目录 | exec-prefix/lib | 不建议 |
–includedir=DIRECTORY | C 和 C++ 头文件的目录 | preifx/include | 不建议 |
–datarootdir=DIRECTORY | 设置下面一些只读文件的根目录。(这些只读文件和数据库本身没有关系,一般指帮忙文档之类的) | prefix/share | 不建议 |
–datadir=DIRECTORY | 和数据库不相关的只读文件目录 | datarootdir | 不建议 |
–localedir=DIRECTORY | 设置安装区域数据的目录,特别是消息翻译目录文件。 | datarootdir/locale | 不建议 |
–mandir=DIRECTORY | PostgreSQL自带的手册页将安装到这个目录,它们被安装在相应的manx子目录里。 默认是DATAROOTDIR/man。 | datarootdir/man | 不建议 |
–docdir=DIRECTORY | 设置安装文档文件的根目录,”man”页不包含在内。这只为后续选项设置默认值 | datarootdir/doc/postgresql | 不建议 |
–htmldir=DIRECTORY | PostgreSQL的HTML格式的文档将被安装在这个目录中 | datarootdir | 不建议 |
–with-extra-version=STRING | 把STRING追加到 PostgreSQL 版本号。 | 不建议 | |
–with-includes=DIRECTORIES | DIRECTORIES是一个冒号分隔的目录列表,这些目录将被加入编译器的头文件搜索列表中。可以理解为pgsql优先搜索这些目录下的依赖包,如果没有再按标准目录查找。 例如: –with-includes=/opt/gnu/include:/usr/sup/include. |
一般情况下不建议 | |
–with-libraries=DIRECTORIES | 和–with-includes类似。 | 一般情况下不建议 | |
–enable-nls[=LANGUAGES] | 打开本地语言支持(NLS),也就是以非英文显示程序消息的能力。LANGUAGES是一个空格分隔的语言代码列表, 表示你想支持的语言。例如–enable-nls=’de fr’ (你提供的列表和实际支持的列表之间的交集将会自动计算出来),该选项需要 Gettext API。 例如:–enable-nls=’de fr’,多个语言使用空格间隔。 |
不建议 | |
–with-pgport=NUMBER | 端口 | 5432 | 一般情况下不建议 |
–with-perl | 服务器端语言Perl,涉及到服务器端编程 | 不建议 | |
–with-python | 服务器端语言python,涉及到服务器端编程 | 不建议 | |
–with-tcl | 服务器端语言tcl,涉及到服务器端编程 | 不建议 | |
–with-tclconfig=DIRECTORY | 服务器端语言tcl的配置目录。配置文件为tclConfig.sh,涉及到服务器端编程 | 不建议 | |
–with-gssapi | 编译 GSSAPI 认证支持。在很多系统上,GSSAPI(通常是 Kerberos 安装的一部分)系统不会被安装在默认搜索位置(例如/usr/include、/usr/lib),因此你必须使用选项–with-includes和–with-libraries来配合该选项。configure将会检查所需的头文件和库以确保你的 GSSAPI 安装足以让配置继续下去。 | 不建议 | |
–with-krb-srvnam=NAME | 不建议 | ||
–with-icu | 例如:–with-icu ICU_CFLAGS=’-I/some/where/include’ ICU_LIBS=’-L/some/ where/lib -licui18n -licuuc -licudata’ | 不建议 | |
–with-openssl | 安装 openssl | 建议 | |
–with-pam | 编译PAM(可插拔认证模块)支持。 | 不建议 | |
–with-bsd-auth | 编译 BSD 认证支持(BSD 认证框架目前只在 OpenBSD 上可用) | 不建议 | |
–with-ldap | 为认证和连接参数查找编译LDAP支持。在 Unix 上,这需要安装OpenLDAP包。在 Windows 上将使用默认的WinLDAP库。configure将会检查所需的头文件和库以确保你的 OpenLDAP安装足以让配置继续下去。 | 不建议 | |
–with-systemd | 编译对systemd 服务通知的支持。如果服务器是在systemd 机制下被启动,这可以提高集成度,否则不会有影响 。要使用这个选项,必须安装libsystemd 以及相关的头文件。 | 不建议 | |
–without-readline | 避免使用Readline库(以及libedit)。这个选项禁用了psql中的命令行编辑和历史, 因此我们不建议这么做。 | 默认支持 | 不建议 |
–with-libedit-preferred | 使用libedit编辑命令行(一般指的BSD) | 默认使用readline | 不建议 |
–with-bonjour | macOS推荐安装 | 不建议 | |
–with-uuid=LIBRARY | LIBRARY可选[“bsd”,”e2fs”,”ossp”] | 不建议 | |
–with-libxml | 不建议 | ||
–with-libxslt | 不建议 | ||
–disable-float4-byval | 禁用float4类型,该选项消耗性能 | 启用 | 不建议 |
–disable-float8-byval | 禁用float8类型,该选项消耗性能 | 启用 | 不建议 |
–with-segsize=SEGSIZE | 超大数据表文件,会切分成若干个大小不超过SEGSIZE的小文件。该值的设置参考系统大文件的最大值。单位G。2的N次幂 Tips : 编译时不带单位 |
1G | 建议 |
–with-blocksize=BLOCKSIZE | 设置块大小,单位K。2的N次幂,1-32K之间 Tips : 编译时不带单位 |
8K | 建议 |
–with-wal-segsize=SEGSIZE | 指定WAL日志文件的大小,单位M。2的N次幂。设置区间 1 - 1024M Tips : 编译时不带单位 |
建议 | |
–with-wal-blocksize=BLOCKSIZE | 指定WAL日志的块大小。单位K。2的N次幂。设置区间 1 - 64K Tips : 编译时不带单位 |
建议 | |
–disable-spinlocks | 即便PostgreSQL对于该平台没有 CPU 自旋锁支持,也允许编译成功。自旋锁支持的缺乏会导致较差的性能,因此这个选项只有当编译终端或者通知你该平台缺乏自旋锁支持时才应被使用。 | 开启 | 不建议 |
–disable-strong-random | 如果操作系统不支持 strong random numbers ,则启用该选项。 | 开启 | 不建议 |
–disable-thread-safety | 禁用客户端库的线程安全性。这会阻止libpq和ECPG程序中的并发线程安全地控制它们私有的连接句柄。 | 开启 | 不建议 |
–with-system-tzdata=DIRECTORY | PostgreSQL包含它自己的时区数据库,它被用于日期和时间操作。这个时区数据库实际上是和 IANA 时区数据库相兼容的,后者在很多操作系统如 FreeBSD、Linux和Solaris上都有提供,因此再次安装它可能是冗余的。当这个选项被使用时,将不会使用DIRECTORY中系统提供的时区数据库,而是使用包括在 PostgreSQL 源码发布中的时区数据库。DIRECTORY必须被指定为一个绝对路径。/usr/share/zoneinfo在某些操作系统上是一个很有可能的路径。注意安装例程将不会检测不匹配或错误的时区数据。如果你使用这个选项,建议你运行回归测试来验证你指定的时区数据能正常地工作在PostgreSQL中。这个选项主要针对那些很了解他们的目标操作系统的二进制包发布者。使用这个选项主要优点是不管何时当众多本地夏令时规则之一改变时, PostgreSQL 包不需要被升级。另一个优点是如果时区数据库文件在安装时不需要被编译, PostgreSQL 可以被更直接地交叉编译。 | 不建议 | |
–without-zlib | 避免使用Zlib库。这样就禁用了pg_dump和 pg_restore中对压缩归档的支持。这个选项只适用于那些没有这个库的少见的系统。 | 开启 | 不建议 |
–enable-debug | 把所有程序和库以带有调试符号的方式编译。这意味着你可以通过一个调试器运行程序来分析问题。 这样做显著增大了最后安装的可执行文件的大小,并且在非 GCC 的编译器上,这么做通常还要关闭编译器优化, 这些都导致速度的下降。但是,如果有这些符号的话,就可以非常有效地帮助定位可能发生问题的位置。目前,我们只是在你使用 GCC 的情况下才建议在生产安装中使用这个选项。但是如果你正在进行开发工作,或者正在使用 beta 版本,那么你就应该总是打开它。 | 关闭 | 不建议 |
–enable-coverage | 开发pgsql使用 | 关闭 | 不建议 |
–enable-profiling | 开发pgsql使用 | 关闭 | 不建议 |
–enable-cassert | 开发pgsql使用 | 关闭 | 不建议 |
–enable-depend | 开发pgsql使用 | 关闭 | 不建议 |
–enable-dtrace | 关闭 | 不建议 | |
–enable-tap-tests |
关闭 | 不建议 |
三、编译
# ./configure --prefix=/usr/local/pgsql/ --with-openssl --with-segsize=4 --with-blocksize=16 --with-wal-segsize=512 --with-wal-blocksize=32 --enable-debug # make # make install
四、启动
4.1 设置环境变量
PATH=/usr/local/pgsql/bin:$PATH export PATH
4.2 创建用户、初始化、启动
# groupadd pgsql && useradd -g pgsql pgsql && chown -R pgsql:pgsql /usr/local/pgsql
# su pgsql Tips:使用root用户不能初始化和启动
$ mkdir -p /usr/local/pgsql/data/ && chown -R pgsql:pgsql /usr/local/pgsql/data/
$ initdb -D /usr/local/pgsql/data
$ pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/logs/access.log start
4.3 实例的停止、启动、重启、reload、status的操作
#操作包括 start 、stop、restart、reload、status、promote、kill # pg_ctl stop -D /usr/local/pgsql/data
4.4 多实例
如果需要在创建多个pgsql实例
# su pgsql $ mkdir -p /data/pgsql/data/ && chown -R pgsql:pgsql /data/pgsql/data/ $ initdb -D /data/pgsql/data $ vim /data/pgsql/data/postgresql.conf #更改port为5433 $ pg_ctl -D /data/pgsql/data -l /data/pgsql/logs/access.log start #启动
五、客户端
推荐一款非常好用的客户端:https://www.pgadmin.org