安装部分参考书籍唐成老师的《Postgre
sql修炼之道》 1. 系统准备 克隆一台CentOS 6.5并
修改IP、计算机名、网卡信息;具体操作如下: [root@demo ~]# ifconfig #记录MAC地址,后面会用到 : HWaddr 00:0C:29:38:97:68 [root@demo ~]# vi /etc/hosts #
修改hosts:172.16.16.191 dbserver dbserver [root@demo ~]# vi /etc/sysconfig/network #
修改network :HOSTNAME=dbserver [root@demo ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 #
修改eth0 :IPADDR=172.16.16.191 HWADDR=00:0C:29:38:97:68 [root@demo ~]# reboot 2. 安装一些依赖的包 [root@dbserver ~]# yum -y install wget gcc gcc-c++ readline-devel zlib-devel make systemtap systemtap-sdt-devel \ perl perl-devel python python-devel tcl tcl-devel perl-ExtUtils-Embed \ sgml-common docbook stylesheets openjade sgml-tools xsltproc libxslt libxslt-devel \ libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel pam pam-devel libreadline6-dev bison flex 3. 下载Postgre
sql 9.5 从官网 http://www.postgre
sql.org/download/ 下载想要的版本,放到自己能找到的
文件夹内,我习惯于放在root 目录 下的soft
文件夹内 [root@dbserver ~]# mkdir soft && cd soft [root@dbserver ~]# wget -c "https://ftp.postgre
sql.org/pub/source/v9.5.4/postgre
sql-9.5.4.tar.gz" [root@dbserver ~]# tar xvzf postgre
sql-9.5.4.tar.gz && cd postgre
sql-9.5.4 4.
自定义安装(也可直接运行configure命令进行缺省安装,缺省时所有
文件都被安装到 /usr/local/pg
sql 目录,configure参数将在结尾详述) [root@dbserver postgre
sql-9.5.4]# mkdir /usr/local/postgre
sql-9.5.4 [root@dbserver postgre
sql-9.5.4]# ./configure --prefix=/usr/local/postgre
sql-9.5.4 \ --with-perl --with-python --with-tcl \ --with-openssl --without-ldap \ --with-libxml --with-libxslt \ --with-wal-blocksize=16 \ --with-blocksize=16 \ --enable-dtrace \ --enable-debug [root@pg postgre
sql-9.5.4]# make && make install #Postgre
sql installation complete. 安装成功,检查/usr/local/postgre
sql-9.5.4/ 路径下会
生成安装
生成的
文件 [root@dbserver postgre
sql-9.5.4]# cd contrib/ [root@dbserver contrib]# make && make install #安装contrib目录下的一些第三方工具,建议安装 [root@pg contrib]# cd 5. 创建
用户、数据目录、初始化
数据库 [root@dbserver ~]# useradd postgres && passwd postgres [root@dbserver ~]# su postgres [postgres@dbserver root]$ mkdir /home/postgres/data -p #注意如果没有切换到postgres
用户,需要给新建
文件加postgres账号的权限 [postgres@dbserver root]$ cd [postgres@dbserver ~]$ /usr/local/postgre
sql-9.5.4/bin/initdb --encoding=utf8 -D /home/postgres/data #至此已安装完成,按照
提示可进行启动和
登录了,如下 [postgres@dbserver ~]$ /usr/local/postgre
sql-9.5.4/bin/pg_ctl -D /home/postgres/data -l logfile start #启动 [postgres@dbserver ~]$ /usr/local/postgre
sql-9.5.4/bin/p
sql #
登录 6.
添加环境变量 [postgres@dbserver ~]$ vi .bash_profile #
添加内容如下: ################################################## export PATH=/usr/local/postgre
sql-9.5.4/bin:$PATH export LD_LIBRARY_PATH=/usr/local/postgre
sql-9.5.4/lib:$LD_LIBRARY_PATH ################################################## [postgres@dbserver ~]$ source .bash_profile [postgres@dbserver ~]$ pg_ctl restart -D /home/postgres/data/ #重启 至此本地的PG已经安装完成,但是需要远程访问和配置出相对高
性能的PG,还需要编辑/home/postgres/data 目录下的postgre
sql.conf 和pg_hba.conf这两个
配置文件,具体配置可直接参考里面说明。 罗列一下遇到的坑:1.安装过程中有变更postgres账号密码,那么安装之后本地
登录没问题,远程
登录即使你密码输入是对的(你
修改之后的密码),也会
提示报错“p
sql: FATAL: password authentication
Failed for user "postgres"”,原因是初始化的时候记录的postgres密码是未改之前的密码(如果你此时可以记得你
修改之前的postgres密码,用那个,是可以
登录的,O(∩_∩)O哈哈~),本地
登录pg ,用alter role
修改密码即可。2. postgres账号的"root"目录(既/home/postgres)忘了
添加环境变量,执行pg_ctl失败。 目前就遇到这一个,后续遇到继续补上 7.关于.configure命令的参数介绍(来自官方文档,在此复制过来,供参考:http://postgres.cn/docs/9.3/installation.html) ./configure 该脚本将运行一些测试来决定一些系统相关的变量,并检测操作系统的设置, 最后将在编译树中创建一些
文件以记录它找到了什么。 如果你想保持编译目录的独立, 那么你也可以在源
代码树之外的其它目录里运行configure。 这个过程也被称为VPATH 编译。这里是
方法: mkdir build_dir cd build_dir /path/to/source/tree/configure [options go here] gmake 缺省设置将编译服务器和应用程序,还有所有只需要C编译器的客户端程序和接口。 缺省时所有
文件都将安装到/usr/local/pg
sql目录。 你可以通过给出下面的一个或多个configure命令 行选项来
自定义编译和安装过程: --prefix=PREFIX 把所有
文件安装到PREFIX目录下而不是/usr/local/pg
sql里。 实际的
文件会安装到不同的子目录里; 甚至没有一个
文件会直接安装到PREFIX目录里。 如果你有特殊需要,你还可以用下面的选项
自定义不同子目录的位置。 不过,即使你保持缺省设置,安装也是可以再定位的,意味着在安装之后可以移动目录(man和doc的位置不受影响)。 为了可以再定位安装,你可能需要使用configure的--disable-rpath选项。 还有,你需要告诉操作系统如何找到共享库。 --exec-prefix=EXEC-PREFIX 把系统结构相关的
文件安装到EXEC-PREFIX, 而不是PREFIX设置的地方。 这样做可以比较方便地在不同主机之间共享系统结构相关的
文件。如果你省略它, 那么EXEC-PREFIX就会被设置为等于PREFIX并且不论与系统结构相关与否的
文件 都会被安装到同一目录树下,这也可能是你想要的。 --bindir=DIRECTORY 声明可执行程序的目录,缺省是EXEC-PREFIX/bin, 通常也就是/usr/local/pg
sql/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 随着Postgre
sql一起的手册页将安装到这个目录的manx子目录里。 缺省是DATAROOTDIR/man。 --docdir=DIRECTORY 设置除"man"以外的文档
文件的根目录。这只设置下面选项的缺省, 这个选项的缺省值是DATAROOTDIR/doc/postgre
sql。 --htmldir=DIRECTORY Postgre
sql的HTML-格式文档将安装在这个目录。 缺省是DATAROOTDIR。 注意: 为了让Postgre
sql能够安装在一些共享的安装位置(比如/usr/local/include), 同时又不至于和系统其它部分产生名字空间干扰,我们采取了一些措施。 首先,安装脚本会
自动给datadir,sysconfdir和docdir后面附
加上"/postgre
sql"字符串, 除非展开的完整路径名已经包含字符串"postgres"或者 "pg
sql"。 比如,如果你选择/usr/local作为prefix, 那么文档将安装在/usr/local/doc/postgre
sql, 但如果prefix是/opt/postgres,那么它将被放到/opt/postgres/doc。 客户端接口的公共C头
文件安装到了includedir,并且是名字空间无关的。 内部的头
文件和服务器端的头
文件都安装到includedir下的私有目录中去了。 参考每种接口的文档
获取关于如何访问头
文件的信息。最后,如果合适, 那么也会在libdir下创建一个私有的子目录,用于安装动态装载模块。 --with-includes=DIRECTORIES DIRECTORIES是一系列冒号分隔的目录, 这些目录将被加入编译器的头
文件搜索列表中。 如果你有一些可选的包(比如GNU Readline)安装在非标准位置, 你就必须使用这个选项, 以及可能还有相应的--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] 打开本地语言
支持(NLS),也就是以非英文
显示程序的消息的能力。 LANGUAGES是一个可选的空格分隔的语言
代码列表,标识你想
支持的语言。 比如--enable-nls='de fr'。(你提供的列表和实际
支持的列表之间的交集会
自动计算出来。) 如果你没有声明一个列表,那么就安装所有可用的翻译。 要使用这个选项,你需要一个Gettext的实现。见上文。 --with-pgport=NUMBER NUMBER为服务器和客户端的缺省端口(缺省是 5432)。这个端口可以在以后设置, 不过如果你在这里声明,那么服务器和客户端将有相同的编译好了的缺省值。这样会方便些。 通常选取一个非缺省值的好理由是你企图在同一台机器上运行多个Postgre
sql服务。 --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-krb5 编译
支持 Kerberos 5 认证的东西。在许多系统上, Kerberos 系统没有安装在缺省的
搜索目录下(比如 /usr/include,/usr/lib), 所以你必须使用附加的--with-includes和--with-libraries选项。 configure在继续配置之前将检查所需要的头
文件和库,以确保 Kerberos 是充分可用的。 --with-krb-srvnam=NAME 缺省的Kerberos服务主的
名称(通过GSSAPI使用)。缺省是postgres。 通常没有理由改变这个值。除非你在Windows环境下,在这种情况下必须设置大写POSTGRES。 --with-openssl 编译
支持SSL(加密的)连接。这个选项需要安装OpenSSL包。 configure将在安装之前检查所需要的头
文件和库
文件以确信OpenSSL安装是充分可用的。 --with-pam 编译PAM(可插拔认证模块)
支持。 --with-ldap 编译LDAP
支持。 用于认证和查找连接参数(参见第 31.17 节和第 19.3.8 节以
获取更多信息)。 在 Unix 上,这需要OpenLDAP包的
支持。 在Windows上,缺省使用WinLDAP库。 configure将会检查所需的头
文件和库以确保OpenLDAP的安装是充分可用的。 --without-readline 避免使用Readline与libedit库。 这样就
关闭了p
sql里的命令行编辑和历史,因此我们不建议这么做。 --with-libedit-preferred 优先使用BSD-认证的libedit库而不是GPL认证的Readline库。 该选项仅在同时安装了这两个库的情况下才有意义。 缺省使用Readline库。 --with-bonjour 编译Bonjour
支持。这要求操作系统
支持Bonjour。在Mac OS X上建议使用。 --with-ossp-uuid 使用OSSP UUID library编译组件。 特别是,编译 uuid-ossp模块, 它提供了
函数产生UUIDs.。 --with-libxml 编译libxml (开启
sql/XML
支持)。需要Libxml 2.6.23或者更高版本
支持这一特性。 Libxml安装程序xml2-config可用于检测所需的编译器和
链接器选项。 如果发现,Postgre
sql将
自动使用它。 在一个不寻常的位置来指定libxml安装, 您可以要么设置环境变量XML2_CONFIG以指向 xml2-config附属于安装的程序 或者使用选项--with-includes和--with-libraries。 --with-libxslt 当编译 xml2模块时,使用libxslt。 xml2依赖于这个库执行XML的XSL转变。 --disable-integer-datetimes 禁用64 位的时间戳整数存储和时间间隔
支持。并且作为浮点数存储日期时间值。 在Postgre
sql8.4版本发布之前缺省浮点日期时间存储。 但它现在已经过时,因为它没有
支持timestamp值的全范围的微秒精度。 然而,基于整数的日期时间存储需要一个64位的整数类型。 因此,当没有这样的类型可用时,或适用于Postgre
sql先前版本的应用程序时, 可以使用此选项。 参阅 第 8.5 节
获取更多的信息。 --disable-float4-byval 禁用"按值传递"float4值,使它们"通过引用"传递。 此选项消耗
性能,但可能需要与用C语言编写的旧的
用户定义的
函数兼容,并且使用 "版本 0"
调用约定。一个更好的长期的
解决办法是使用"版本 1"
调用约定更新任何此类
函数。 --disable-float8-byval 禁用"按值传递"传递float8值,使它们"通过引用"传递。 此选项消耗
性能,但可能需要与用C语言编写的旧的
用户定义的
函数兼容,并且使用 "版本 0"
调用约定。一个更好的长期的
解决办法是使用"版本 1"
调用约定更新任何此类
函数 请注意,此选项不仅影响float8,而且也影响int8以及一些相关类型(如时间戳)。 在32位平台上,缺省是--disable-float8-byval。 并且它不允许选择--enable-float8-byval。 --with-segsize=SEGSIZE 设置段大小 ,以GB为单位。 大表被分成多个操作系统
文件,每个
文件的大小等同于段大小。 这避免了存在许多平台上的
文件大小限制。 默认段大小,1GB,在所有
支持的平台上是安全的。 如果你的操作系统
支持"largefile"(现在大多数
支持), 你可以使用更大的段大小。 这可以帮助减少当大表工作时消耗掉的
文件描述符
数量。 但要小心,不要选择一个大于您的平台和您打算使用的
文件系统
支持的值, 你可能希望使用其他工具,比如tar, 也可以设置可用
文件大小的限制。 因此建议,虽然不是绝对必要的,但该值是2的幂。 请注意,改变这个值需要初始化
数据库。 --with-blocksize=BLOCKSIZE 设置块大小,以KB为单位。这是表中存储和I/O单元。 默认情况下,8KB,适用于大多数情况; 但是其它的值可能在特殊情况下是有用的。 该值必须是1和32之间(KB)2的幂。 请注意,改变这个值需要初始化
数据库。 --with-wal-segsize=SEGSIZE 设置WAL段大小,以MB为单位。 这是WAL日志中每个单独的
文件的大小。它可能有助于调整这个大小来控制WAL日志传送的粒度。 缺省大小为16MB。 该值必须是1和64之间(MB)2的幂。 请注意,改变这个值需要初始化
数据库。 --with-wal-blocksize=BLOCKSIZE 设置WAL块大小,以KB为单位。 这是WAL日志中存储和I/O单元。 默认情况下,8KB,适用于大多数情况; 但是其它的值可能在特殊情况下是有用的。 该值必须是1和64之间(KB)2的幂。 请注意,改变这个值需要初始化
数据库。 --disable-spinlocks 允许在Postgre
sql没有该平台的
cpu自旋锁
支持的情况下编译成功。 缺乏自旋锁的
支持将导致
性能恶化; 因此,只有在编译过程
退出,并且告诉你说该平台缺乏自旋锁
支持的时候才使用这个选项。 如果在你的平台上需要这个选项才能编译Postgre
sql, 请向Postgre
sql开发者报告这个问题。 --disable-thread-safety 禁用客户端库是线程安全的。 这样就允许在libpq和 ECPG程序里的并发线程安全地控制他们私有的连接句柄。 --with-system-tzdata=DIRECTORY Postgre
sql包括它自己的时区
数据库, 它要求对日期和时间操作。此时区
数据库实际上是与许多操作系统比如FreeBSD,Linux,and Solaris提供的"zoneinfo"时区
数据库兼容。 所以重新安装将是多余的。当这个选项被使用时,将使用系统在DIRECTORY中提供的时区
数据库来代替Postgre
sql源
代码发布中的时区
数据库。 DIRECTORY必须作为
绝对路径被指定。 /usr/share/zoneinfo是某些操作系统上的可能目录。 请注意,这个安装程序将不检测不匹配的或者
错误的时间区域数据。 如果您使用此选项,建议您运行回归测试,以验证你指定的时区数据, 在Postgre
sql中能够很好的工作。 该选项主要是针对那些对他们要使用的操作系统了如指掌的二进制软件包的分发者。 使用此选项的主要优势是,当许多当地白昼节约时间规则变化的任何时候,Postgre
sql包不需要
升级。 另一个优点是,如果时区
数据库文件在安装期间不需要被编译,Postgre
sql可以进行交叉编译更直截了当。 --without-zlib 避免使用Zlib库。这样就
关闭了pg_dump 和pg_restore里面的压缩
支持。 这个选项只适用于那些没有这个库的罕见的系统。 --enable-debug 把所有程序和库以带有调试符号的方式编译。这意味着你可以通过一个调试器运行程序来分析问题。 这样做显著增大了最后安装的可执行
文件的大小,并且在非GCC的编译器上, 这么做通常还要
关闭编译器优化,导致速度的下降。但是,如果有这些符号的话, 就可以非常有效地帮助
解决可能发生的问题。目前, 我们只是在你使用GCC的情况下才建议在产品的安装中使用这个选项。 但是如果你正在进行开发工作,或者正在使用beta版本, 那么你就总应该打开它。 --enable-coverage 如果使用GCC,所有的程序和库连同
代码覆盖测试设置一起被编译。 在运行时,它们与
代码覆盖率度量在编译目录下
生成文件。 参阅第 30.4 节
获取更多信息该选项只在使用GCC进行开发工作时使用。。 --enable-profiling 如果使用GCC,则编译所有程序和库,使他们可以配置。在
后台退出,创建子目录, 包含配置用的gmon.out
文件。 该选项只在使用GCC进行开发工作时使用。 --enable-cassert 打开服务器中的assertion检查,它会检查许多"不可能发生"的条件。 它对于
代码开发的用途而言是无价之宝,不过这些测试可以显著减缓服务器。 并且,打开这个测试不会提高系统的稳定性!这些断言检查并不是按照
错误的严重性
分类的, 因此一些相对无害的小问题也可能导致服务器重启 (只要它触发了一次断言失败)。目前, 我们不推荐在产品环境中使用这个选项,但是如果你在做开发或者在使用beta版本的时候应该打开它。 --enable-depend 打开
自动依赖性跟踪。如果打开这个选项, 那么 makefile
文件将设置为在任何头
文件被
修改的时候都将重新编译所有受影响的目标
文件。 如果你在做开发的工作,那么这个选项很有用,但是如果你只是想编译一次并且安装, 那么这就是浪费时间。目前,这个选项只有在你使用GCC的时候才管用。 --enable-dtrace 编译Postgre
sql支持动态跟踪工具DTrace。 参阅第 27.4 节
获取更多信息。 指向dtrace程序,设置环境变量DTRACE。 这往往是必须的,因为dtrace 通常安装在/usr/sbin中且该目录一般不在
搜索路经中。 在环境变量DTRACEFLAGS中为dtrace程序指定 额外命令行选项。在Solaris上, 要包含64位二进制的DTrace
支持,需要为configure指定DTRACEFLAGS="-64",比如, 在使用GCC编译的时候: ./configure CC='gcc -m64' --enable-dtrace DTRACEFLAGS='-64' ... 在使用Sun编译器的时候: ./configure CC='/opt/SUNWspro/bin/cc -xtarget=native64' --enable-dtrace DTRACEFLAGS='-64' ... 如果你喜欢使用不同于configure找出来的 C 编译器, 可以将环境变量CC设置为你选择的程序。缺省时, configure将选择gcc(只要可用), 或者是该平台的缺省(通常是cc)。类似地, 你可以用CFLAGS覆盖缺省编译器标志。 你可以在configure命令行上声明环境变量,比如: ./configure CC=/opt/bin/gcc CFLAGS='-O2 -pipe'