1、postgresql954和pldebuger调试安装序言厌倦了办公室政治的谄媚妄讳,尔虞我诈的关系;想多些时间真正坐下,安心下来为他人留下点经验可以借鉴。留下此篇文章,希望将来可以对初学者提供一些帮助。开始安装POSTGRESQL的时候,也是从网上查一些别人提供的安装文档参照安装的,windows版本安装最简单,再此不想多言。我仅仅就linux(centos6.6 postgresql9.5.4 以及调试程序pldebugger)的安装做些描述,如有纰漏也是本人能力有限敬请谅解。同时也要感谢 (第一步:安装前准备安装数据库,首先要知道有些安装程序上的依赖,为此请认真查证是否本机已经安装的软件
2、依赖包已经满足要求。(下面是方法:)CentOS中查看是否安装了某个软件的命令:rpm -qa | grep 软件名(可非全名)which命令可查看某个软件的安装路径。使用 yum install 包名 来安装软件包。(注意这是非源码安装)-下面关键-1.GNU make的版本3.80以上rootlocalhost # rpm -qa | grep makemake-3.81-20.el6.x86_64rootlocalhost # which gcc/usr/bin/gcc2.ISO/ANSI编译器,推荐最新版本的GCCrootlocalhost # rpm -qa | grep gccgc
3、c-4.4.7-4.el6.x86_64libgcc-4.4.7-4.el6.x86_64gcc-c+-4.4.7-4.el6.x86_64rootlocalhost # gcc -vgcc 版本 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)3.源码包的解压工具tar,除此之外还有gzip或bzip2rootlocalhost # rpm -qa | grep tarlibtar-1.2.11-17.el6_4.1.x86_64tar-1.23-11.el6.x86_64rootlocalhost # tar -versiontar (GNU tar) 1.23
4、4.默认使用GNU Readline库rootlocalhost # rpm -qa | grep readlinereadline-6.0-4.el6.x86_645.默认使用zlib压缩库rootlocalhost # rpm -qa | grep zlibzlib-1.2.3-29.el6.x86_646.可选软件包:(洋人的东西,还得看洋文,请不懂洋文的同学绕过)http:/www.postgresql.org/docs/9.3/interactive/install-requirements.html(1)为了编译PL/Perl服务器端编程语言,需要完整Perl的安装,包括libpe
5、rl库和头文件。(2)为了编译PL/Python服务器端语言,需要一个包含头文件和distuils模块的Python安装。(3)为了编译PL/Tcl服务器端语言,需要Tcl的安装。(4)为了使用NSL,即具有使用不同于英语的一种语言显示消息的能力,需要一种Gettext API的实现。(5)需要Kerberos, OpenSSL, OpenLDAP, and/or PAM,如果你想要使用这些服务支持认证或加密。(6)为了编译PostgreSQL的文档,有一组独立的要求。查看http:/www.postgresql.org/docs/9.3/interactive/docguide-toolse
6、ts.html第二步:获取PostgreSQL源码、pldebugger程序源码 1.下载源码:官网:http:/www.postgresql.org/ftp/source/,这里下载的是最新版postgresql9.5.4.这个地址比较快(我下载的9.5.4)2.解压:你解压前,先找个文件夹,比如/usr/local/src ,把压缩文件放在这,然后解压tar -zxvf postgresql-9.5.4.tar.gz随后会生成一个新的文件夹 /usr/local/src /postgresql-9.5.4。cd postgresql-9.5.4(查看是否有contrib文件夹,记住这个文件
7、夹)3. 下载pldebugger源程序代码,cd contib 执行下面的命令, git clone git:/git.postgresql.org/git/pldebugger.git将下载并创建pldebugger文件夹(安装postgresql数据库前,请你一定要做好上面插件的下载)加强理解几个概念:(网上其他文,说的比较含糊不清)源程序位置: /usr/local/src/postgresql-9.5.4第三方插件包放置位置:/usr/local/src/postgresql-9.5.4/contrib(网上许多安装文档都说找源码,实际指的就是这个位置文件夹)第三方插件简介:(如果想
8、深入研究,可跨过不看)(contrib/:已打包到PG源码中的第三方贡献的插件源码)adminpack:一些管理函数auth_delay:认证失败后延迟报异常,可以防止暴力破解auto_explain:将超过指定执行时间的SQL的执行计划输出到日志中btree_gin:gin索引方法的btree操作符扩展(在某些情况下“多列gin组合索引”比“多个btree单列索引”的bitmap anding更高效)btree_gist:gist 索引方法的btree操作符扩展(在组合索引中的某些列类型仅支持gist索引访问方法,而另一些列的类型支持btree以及gist时 btree_gist更为有效,同
9、时btree_gist还新增了用于排他约束,用于近邻算法)chkpass:自动加密的字段类型(使用UNIX标准函数crypt()进行封装,所以仅支持前8位安全)abcdefghijkl:chkpass-abcdefghcitext:不区分大小写的数据类型cube:多维立方体类型,支持多维立方体对象的相同,相交,包含等运算dblink:PostgreSQL跨库操作插件dict_int:全文检索的一个字典模版,用于控制数字被拆分的最大长度,以控制数字在全文检索中的分词个数(maxlen=6:12345678 - 123456截断成6个,rejectlong=true则忽略这个分词)dict_xsy
10、n:全文检索的一个字典模块,设置分词的同义词,支持同义词匹配dummy_seclabel:用于安全标签SQL的测试earthdistance:可以使用cube或point类型计算地球表面两点之间的距离file_fdw:文件外部表模块fuzzystrmatch:单字节字符串之间的相似性判断hstore:用于存储K-V数据类型,同时这个插件还提供了比较V类型相关的函数和操作符。例如提供数组,json,hstore之间的转换,K-V的存在判断,删除K-V值intagg:int类型的数组聚合函数(内建的array_agg函数已包含这个功能)intarray:int类型的数组功能扩展库,提供了一些常用的
11、函数和操作符(数组元素个数,元素排序,元素下标,取元素子集,相交,包含,增加元素,删除元素,合并等)isn:提供国际通用的产品标识码数据类型,例如ISBN,ISMN.lo:大对象的一个可选模块,lo类型以及自动unlink大对象的触发器,方便大对象在消亡后的自动unlink,防止大对象存储泄漏(类似内存泄漏)ltree:异构数据类型以及操作函数和操作符。例如China.Zhejiang.Hang9.1)pg_upgrade_support:pg_upgrade用到的服务端函数集pg_xlogdump:从xlog中dump出一些易读的底层信息postgres_fdw:postgresq跨库的外部
12、表插件seg:线段类型和浮点数的区间类型,以及相关的操作符,索引访问方法等sepgsql:基于SELinux安全策略的访问控制模块spi:一些服务端的触发器函数(例如跟踪记录的存活时间,被哪个用户修改了,记录的修改时间等)sslinfo:输出ssl认证的客户端的一些认证信息start-scripts:数据库启动脚本模版tablefunc:一般可用于行列变换,异构数据处理等tcn:提供异步消息输出的触发器test_parser:全文检索中的一个自定义parser的测试插件tsearch2:全文检索相关的插件,在全文检索未引入PG内核前的PG版本可以使用这个插件来实现全文检索功能,大于8.3以后就
13、不需要这个了unaccept:全文检索相关的插件uuid-ossp:生成UUID的插件vacuumlo:大对象垃圾回收的命令worker_spi:9.3新增的服务端worker编程范例xml2:xml相关插件(我上面省略了不是源代码目录介绍内容,如果想仔细研究请看原文)第四步:源码安装PostgreSQL-9.5.4步骤如下:1.配置(Configuration)进入源码目录:rootlocalhost src# cd /usr/local/src/postgresql-9.5.4(执行配置程序,这个比较有讲究)我执行的配置文件是下面这样:(因为有些参数要依赖包担心不成功,因此选如下参数)ro
14、otlocalhost postgresql-9.5.4#./configure -prefix=/opt/pgsql9.5.4 -with-pgport=5432 -with-python -with-openssl -with-libxml -enable-thread-safety -with-wal-blocksize=16 -with-blocksize=16洋文默认配置如下:./configure -with-openssl -enable-thread-safety这种默认的配置将编译服务器和使用工具,以及所有客户端应用程序和接口,只需要一个C编译器。所有文件默认将安装到/usr
15、/local/pgsql中。洋人的配置安装说明http:/www.postgresql.org/docs/9.3/interactive/install-procedure.html这里,网上的配置是可选参数设置如下:而且有说明,比较感谢原作者./configure -prefix=/opt/pgsql9.5.4 -with-pgport=5432 -with-perl -with-python -with-tcl -with-openssl -with-pam -without-ldap -with-libxml -with-libxslt -enable-thread-safety -wi
16、th-wal-blocksize=16 -with-blocksize=16 -enable-dtrace -enable-debug配置选项说明:-prefix=/opt/pgsql9.5.4:安装所有文件在/opt/pgsql9.5.4中(也就是安装目录)(取代默认时的/usr/local/pgsql)。-with-pgport=5432:为服务器和客户端设置默认端口号。默认是5432。-with-perl:编译PL/Perl服务端语言。-with-python:编译PL/Python服务端语言。-with-tcl:编译PL/Tcl服务端语言。-with-openssl:编译支持SLL(加
17、密)连接。这需要安装OpenSSL包。-with-pam:编译支持PAM(Pluggable Authentication Modules,可插拔认证模块)-without-ldap:编译支持认证和连接参数检查-with-libxml:编译libxml(支持SQL/XML),支持这个选项需要Libxml 2.6.23及最新版-with-libxslt:编译xml2模块,使用libxslt-enable-thread-safety:让客户端库是线程安全的-with-wal-blocksize=16:WAL:预写式日志(Write-Ahead Logging)设置WAL的block size,以M
18、B为单位。这是在WAL日志中的每个独立文件的大小。为了控制WAL日志传送的粒度去调整其大小,这可能是非常有用的。默认为16MB。这个值必须是2的1到64次方(MB)。注意,改变这个值需要一个initdb。-with-blocksize=16:设置block size,以KB为单位。这是表的存储和IO单元。默认为8K,适用于大多数情况;但是在特殊场合中,其他的值可能是非常有用的。这个值必须是2的1到32次方(KB)。注意,改变这个值需要一个initdb。-enable-dtrace:编译PostgreSQL支持动态跟踪工具DTrace-enable-debug:把所有程序和库以带有调试符号的方式
19、编译-enable- nls=LANGUAGES:打开本地语言支持(NLS),即以非英文显示程序的信息的能力。LANGUAGES是一个空格分隔的语言代码列表,标识 你想支持的语言。比如-enable-nls=de fr。(你提供的列表和实际支持的列表之间的交集将会自动计算出来。)如果你没有声明一个列表,那么就安装所有可用的翻译。(还可以在-enable-debug前,添加两个选项:-enable-depend -enable-cassert)配置过程可能会遇到依赖的动态库缺失, 安装这些缺失的库即可。记录下我这里的缺失lib的安装:dtrace工具的安装:PostgreSQL支持动态跟踪, 可
20、以通过dtrace或者systemtap工具统计相关探针的信息。在CentOS中安装systemtap:在安装systemtap前,要保证kernel对应的kernel-devel包的版本保持一致:检查:rootlocalhost # rpm -qa|grep kernelrootlocalhost # uname -a不一致的话,则安装对应的kernel-devel版本或者升级kernel:rootlocalhost # yum install kernel-devel或:rootlocalhost # yum update kernel重启服务器。安装systemtaprootlocalh
21、ost # yum install systemtap systemtap-sdt-devel其中:安装systemtap时,安装了systemtap-devel、systemtap-client和systemtap-runtime这3个包。systemtap-sdt-devel是编译PostgreSQL时,选项-enable-dtrace需要的包。使用命令:rootlocalhost # rpm -qf /usr/bin/stapsystemtap-devel-2.3-4.el6_5.x86_64systemtap-client-2.3-4.el6_5.x86_64rpm -qf:查询文件隶
22、属的软件包检查stap是否正常rootlocalhost # stapA script must be specified.Try -help for more information.此时stap是正常的。接着测试下:rootlocalhost # stap -ve probe begin log(hello world) exit() Pass 1: parsed user script and 96 library script(s) using 198456virt/26648res/3080shr/24072data kb, in 260usr/40sys/296real ms.Pa
23、ss 2: analyzed script: 1 probe(s), 2 function(s), 0 embed(s), 0 global(s) using 198852virt/27396res/3320shr/24468data kb, in 10usr/0sys/10real ms.Pass 3: using cached /root/.systemtap/cache/ca/stap_ca2aff10c84d1cf00083e0eb3e5d7082_1033.cPass 4: using cached /root/.systemtap/cache/ca/stap_ca2aff10c84
24、d1cf00083e0eb3e5d7082_1033.koPass 5: starting run.hello worldPass 5: run completed in 40usr/80sys/404real ms.stap调试好后,就可以用来跟踪postgresql了。PostgreSQL编译时必须开启dtrace支持,即-enable-dtrace。开启dtrace后,数据库将启用代码中的探针或跟踪点。回到PG的继续重新执行configure,遇到问题以及解决方法:(1)问题1:noconfigure: error: could not determine flags for linki
25、ng embedded Perl.This probably means that ExtUtils:Embed or ExtUtils:MakeMaker is notinstalled.解决方法:yum install perl-ExtUtils-Embed(2)问题2:configure: error: readline library not foundIf you have readline already installed, see config.log for details on thefailure. It is possible the compiler isnt loo
26、king in the proper directory.Use -without-readline to disable readline support.解决方法:yum install readline readline-devel(3)问题3:checking for inflate in -lz. noconfigure: error: zlib library not foundIf you have zlib already installed, see config.log for details on thefailure. It is possible the compil
27、er isnt looking in the proper directory.Use -without-zlib to disable zlib support.解决方法:yum install zlib zlib-devel(4)问题4:checking for CRYPTO_new_ex_data in -lcrypto. noconfigure: error: library crypto is required for OpenSSL解决方法:yum install openssl openssl-devel(5)问题5:checking for pam_start in -lpam. noconfigure: error: library pam is required for PAM解决方法:yum install pam pam-devel(6)问题6:checking for xmlSaveToBuffer in -lxml2. noconfigure: error: library xml2 (version = 2.6.23) is required for XML support解决方法:yum install libxml2 libxml2-devel(7)问题7:checking for xsltCleanupGlobals
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1