因为最近组里的项目和postgresql有关,并且需要查看和调试源码,所以专门学习了一下如何安装和调试postgresql,此博文用来记录自己的安装和调试过程。安装环境是CentOS6(CentOS7可能稍微有点不一样,不过大体上是一样的),调试工具是gdb。

既然是希望后期能够调试和跟踪源码,我们选择从源码编译安装。我们首先从官网取Source,官网在这里:

https://www.postgresql.org/ftp/source/

在这里你可以看到发布的所有postgresql版本,我取的是postgresql9.5.4这个版本,其他版本的编译流程也是类似的,大家随意,这里不赘述了。

取到source后,准备开始编译安装。

这里需要注意的postgresql编译需要预装一些工具。除了make、gcc(GNU编译器套件)这些基本必备的工具,还要有zlib、bison(一个YACC语法分析生成器的GNU实现)、readline等等。。。。太多记不住?

没关系,我们先进去编译,遇到缺少的包,会提示你缺少相应的包,再安装上即可。

取到源码 我们先解压:tar -zxvf postgresql-9.5.4.tar.gz

cd postgresql-9.5.4 进去

这里要注意的是,由于我希望后面能跟踪代码的运行路径,所以我要在编译configure的时候加上--enable-debug的选项,并且修改src/Makefile.global文件:

CFLAGS = -O2 -Wall -Wmissing-prototypes -Wpointer-arith \
-Wdeclaration-after-statement -Wendif-labels -Wformat-security \
-fno-strict-aliasing -fwrapv

把上面的"-O2"选项删除,然后加上"-g" 如下所示:

CFLAGS = -g -Wall -Wmissing-prototypes -Wpointer-arith \
-Wdeclaration-after-statement -Wendif-labels -Wformat-security \
-fno-strict-aliasing -fwrapv

为什么要这么做呢?因为"-O2"是编译器的优化选项,如果打开了,代码的执行顺序会改变,使得追踪起代码来比较困难。当然去除了优化选项,编译后的可执行文件会比较大,而且会比较慢,所以不太适合生产环境。所以切记这个操作仅仅是在学习的时候而设置的。

不想修改文件的话,也可以先这样做:

export CFLAGS = "-g -Wall -Wmissing-prototypes -Wpointer-arith \
-Wdeclaration-after-statement -Wendif-labels -Wformat-security \
-fno-strict-aliasing -fwrapv"

然后输入如下命令:

./configure --prefix=/opt/psql --with-perl --with-tcl --with-python --with-openssl 
--with-pam --without-ldap --with-libxml --with-libxslt --enable-thread-safety
--with-wal-blocksize= --with-blocksize= --enable-dtrace --enable-debug

其中--prefix是指定软件的安装路径,--with选项是指安装本文件依赖的库文件。如有不清楚可以自己学习下configure命令的相关参数。

运行之后,显示如下错误:

果然 缺少了dtrace,没关系,我们使用yum命令:

找到了,我的机器是64位的,所以果断选择第二个:

使用yum命令(当然其实也可以用rpm命令,但是yum命令自己就可以解决各种包之间的依赖问题,所以推荐yum命令)安装:

yum install -y systemtap-sdt-devel.x86_64

安装成功!

然后继续运行configure命令,遇到其他包的问题类似上面的处理,这里就不赘述了。

当然,对于伸手党们,下面的这个链接可供参考:

http://blog.csdn.net/luojinbai/article/details/44217551

运行上面的configure命令后,如果显示如下的画面那就是成功了。

然后再运行make命令,耐心等待一会,make会需要几分钟时间。

这样之后就可以make install命令了

make install也OK了!

然后你就会发现在/opt/目录下找到你安装的psql了

其中:

/opt/psql/bin里面放的是可执行命令,比如createdb之类的;

/opt/psql/lib里面放的是库文件;

/opt/psql/include里面放的是头文件;

/opt/psql/share是相关的资源文件。

这些文件如果在configure命令中没有指定--prefix的话,会安装到/usr/local/目录下,以后要删除的时候就要一个个找了,比较麻烦。

好的 我们安装好了postgresql程序,接下来进行配置。

为了安全考虑,postgresql不允许使用root用户操作数据库,我们在系统中为使用postgresql添加一个用户postgres:

并创建密码:

然后我们切换到postgres用户下(切记是 su - ,“-”不可少):

编辑/home/postgres下的.bash_profile

设置以下的环境变量

export PGHOME=/opt/psql  (这个就是我们的安装目录)

export PGDATA=~/data        (数据存放的目录,这个看你高兴了,不要求一定放在这里)

export PATH=$PATH:$HOME/bin:$PGHOME/bin

然后source一下

source  ~/.bash_profile

使环境变量生效。

接下来初始化数据库,使用initdb命令(如果提示command not found,那么很有可能是你上面的PGHOME设置错误或者没有source一下)

然后会有以下显示:

数据库的初始化完成!

然后运行

pg_ctl start

启动postgres数据库实例。此时你就可以使用

ps -ef | grep postgres

看到postgresql进程了。

现在我们可以进入数据库,使用如下命令:

psql -h 127.0.0.1 -d postgres -U postgres

当然,如果是进入本机的和用户名同名的数据库,直接psql即可,具体解释可查看postgresql官方手册。

如果我们比较懒,不想每次登录手动启动psql,那么设置下psql开机启动。

PostgreSQL的开机自启动脚本位于PostgreSQL源码目录的contrib/start-scripts路径下:

linux文件即为自启动脚本。

1)修改linux文件属性,添加X属性(这里如果提示无权限的话,切换到root用户进行操作)

[root@localhost start-scripts]# chmod a+x linux

2) 复制linux文件到/etc/init.d目录下,更名为postgresql

[root@localhost start-scripts]# cp linux /etc/init.d/postgresql

3)修改/etc/init.d/postgresql文件的两个变量

prefix设置为postgresql的安装路径:/opt/psql

PGDATA设置为postgresql的数据目录路径:/home/postgres/data

执行service postgresql start,就可以启动PostgreSQL服务

4) 执行service postgresql start,就可以启动PostgreSQL服务

[root@localhost start-scripts]# service postgresql start

5)设置postgresql服务开机自启动

[root@localhost start-scripts]# chkconfig --add postgresql

执行上面的命令,就可以实现postgresql服务的开机自启动。

这次就先写这么多,第二部分再介绍下postgresql的代码结构和调试方法。

postgresql编译安装与调试(一)的更多相关文章

  1. postgresql编译安装与调试(二)

    接前文postgresql编译安装与调试(一),继续说说postgresql的编译安装与调试. 上一篇已经详细说明了如何在Linux系统上编译安装postgresql,这次我们在此基础上简单讲讲如何在 ...

  2. PostgreSQL编译安装

    PostgreSQL编译安装 安装语言包 ### PostgreSQL 初始化过程中,会读取操作系统字符编码, ### 若程序需要使用zh_CN.utf-8字符编码,需要在PostgreSQL 初始化 ...

  3. 在CentOS上编译安装PostgreSQL

    http://my.oschina.net/tashi/blog 第一步:准备阶段 获取必需软件包: CentOS中查看是否安装了某个软件的命令:rpm -qa | grep 软件名.which命令可 ...

  4. PostgreSQL(一) 编译安装运行

    原创,如转发需注明出处. 多年没写博客,一直用的个人笔记软件,最近准备阅读PostgreSQL源码,故记录.(这两年PostgreSQL数据库在某些环境下是比较火的,原因想必大家都清楚.) Postg ...

  5. Linux环境PostgreSQL源码编译安装

    Linux环境PostgreSQL源码编译安装 Linux版本: Red Hat 6.4 PostgreSQL版本: postgresql-9.3.2.tar.gz 数据存放目录: /var/post ...

  6. ubuntu编译安装postgresql

    闲着没事用源码编译安装了postgresql,遇到了不少故障,记录一下. 1:用./configure配置时发生错误.看信息说是缺少相关包.有什么readline,zlip等. 我配置的很简单,只是配 ...

  7. Redhat 7.2 编译安装PostgreSQL 10

    1.环境说明 CentOS7.2 postgresql10.4 2.下载 postgresql的官方地址 https://www.postgresql.org/ftp/source/ 在下载列表中根据 ...

  8. CentOS7编译安装PostgreSQL

    创建组和用户 groupadd postgres useradd -g postgres postgres passwd postgres 编译安装 yum install -y gcc gcc-c+ ...

  9. Mac OSX下编译安装PostgreSQL

    原先使用的是官方提供的安装包,可是安装包会创建postgre这个用户.在登陆界面看的有点不爽,搜索了半天居然没有找到怎样在osx下编译安装的教程,并且假设是依照官方文档的编译安装办法一定会让你崩溃,本 ...

随机推荐

  1. Java微信公众平台开发--番外篇,对GlobalConstants文件的补充

    转自:http://www.cuiyongzhi.com/post/63.html 之前发过一个[微信开发]系列性的文章,也引来了不少朋友观看和点评交流,可能我在写文章时有所疏忽,对部分文件给出的不是 ...

  2. [原创]JMeter初次使用总结

    引言 最近开发 java 后端项目,对外提供Restful API接口,完整功能开发现已完成. 目前通过单测(68%行覆盖率)已保证业务逻辑正确性,同时也尝试使用JMeter进行压力测试以保证并发性能 ...

  3. 从cocos2d-x-2.x到cocos2d-x-3.x: lua项目配置

    cocos2dx-x3.0的正式版出来也有一段时间了,现在最新的版本是到了3.2alpha,和2.x系列相比,能够找到的相关资料除了官网上的wiki,其他的也不见得多,遇到的一些和2.x的差异和问题在 ...

  4. svn add文件名包含@符号的解决方案

    [svn add文件名包含@符号的解决方案] 在iOS开发过程中,代码得用SVN管理起来,但是遇到这么个问题:Default@2x.png文件svn add不成功,总提示找不到这个文件. 结果查了查资 ...

  5. jquery与原生js比较

    以选择符为例,类似于这种 $(".class") 方式,在ie里面,肯定比$("#id") 低很多,而对于chrome和firefox,则因为提供了getEle ...

  6. 【光速使用开源框架系列】数据库框架OrmLite

    [关于本系列] 最近看了不少开源框架,网上的资料也非常多,但是我认为了解一个框架最好的方法就是实际使用.本系列博文就是带领大家快速的上手一些常用的开源框架,体会到其作用. 由于作者水平有限,本系列只会 ...

  7. PHP自动加载配置ArrayAccess类

    ArrayAccess是PHP的类,可以把对象当成数组来使用访问. Config.php   配置类 <?php namespace IMooc; class Config implements ...

  8. codeforce 457DIV2 B题

    题意:  题目给出两个整数n,k,(n<=10^18,k<=10^5),求一个含有k个整数的序列,要求以2为底,以序列内数字为幂的和为n,其中序列内最大的数最小,若有多个序列满足条件,输出 ...

  9. 安装gdb insight(6.8.1)

    如果之前安装过6.8或其它版本,请先删除以下目录 rm -rf /usr/local/insight rm -rf /usr/share/tcltk 如果之前设置过环境变量,也请删除 unset TC ...

  10. Eclipse导入MyEclipse项目遇到问题解答

    导入一个其他IDE中的项目,第一一定要想到:不同IDE中的配置文件问题: 比如:tomcat启动寻找项目的根目录问题,Eclipse的webContext,Myeclipse的是Webroot文件夹, ...