因为最近组里的项目和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的代码结构和调试方法。

最新文章

  1. spark处理大规模语料库统计词汇
  2. node(async原理)
  3. opengl绘制正弦曲线
  4. RedHat6.6更新Centos6yum源
  5. MVC 自定义异常错误页面处理
  6. React Native(ios)项目中logo,启动屏设置
  7. 【学习总结】Info.plist和pch文件的作用
  8. poj 3744 矩阵 高斯消元
  9. (十一年)unity4.6得知Ugui中国文献-------参考-UGUI Visual Components
  10. HDU1172(枚举)
  11. MVC Anti-XSS方案
  12. k8s 如何 Failover?- 每天5分钟玩转 Docker 容器技术(127)
  13. idea下创建maven聚合(子父级)项目,多模块项目
  14. TCP详解——连接建立与断开
  15. Java面向对象 第2节 Scanner 类和格式化输出printf
  16. samba 配置文件解析
  17. python 内置函数 sorted()
  18. SpringMVC之数据绑定
  19. xStream解析生成xml文件学习资料
  20. windows下搭建voip服务器

热门文章

  1. Linux日志文件查看和搜查命令(错误日志排查定位)
  2. JAVA爬取亚马逊的商品信息
  3. 摄影之HDR
  4. zabbix监控MySQL部署实战
  5. 【知识碎片】python 篇
  6. Iterator(迭代器)的一般用法 (转)
  7. ajax 两者有什么不同
  8. 常用的正则规则,直接copy就OK了
  9. java Web jsp页面的静态包含和动态包含
  10. 银行家算法之JavaScript实现