zoukankan      html  css  js  c++  java
  • postgresql编译安装与调试(一)

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

    作者:非我在
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
    感谢您的阅读。如果觉得有用的就请各位大神高抬贵手“推荐一下”吧!你的精神支持是博主强大的写作动力。
    如果觉得我的博客有意思,欢迎点击首页左上角的“+加关注”按钮关注我!
  • 相关阅读:
    现代JVM内存管理方法的发展历程,GC的实现及相关设计概述(转)
    jvm对大对象分配内存的特殊处理(转)
    用java字节码解释i++和++i(转)
    Git 常用命令手记 及 Github协同流程(转)
    经常使用git命令集
    Android手机分辨率基础知识(DPI,DIP计算)
    软件測试自学指南---从入门到精通
    惊!从一场离奇的命案说起
    java设计模式演示样例
    浅谈UML的概念和模型之UML九种图
  • 原文地址:https://www.cnblogs.com/flying-tiger/p/5859393.html
Copyright © 2011-2022 走看看