前言
前几天安装公司的一个现场环境,折腾了下centos8。不过公司用的是postgresql9.6,当初选这个版本只是因为成功案例比较多,比较稳定,centos7上面好装。现在觉得,centos8是一个有必要跟进的新版本,但是之前尝试在centos8上面装9.6的时候,怎么都没装上。懒得折腾,就装了他仓库里的版本,好像是10。现在想来,因为pg的仓库维护得好,导致我丧失了对其源码安装的能力,这似乎对深入使用pg没啥好处,所以,今天就在自己的环境里折腾一番。
下载
很好找下载,在官网就找得到,我这里直接给出12.1的网页链接: https://www.postgresql.org/ftp/source/v12.1/ 下载速度有些慢,不过包很小,没啥挑的。我下的tar.gz的包。
安装
处于对pg官网的信任,我们就直接按照官网来装了,说明地址为: https://www.postgresql.org/docs/12/installation.html。
短版本
官网给了一个短的版本,会场牛批,我粘出来,太实在了:
./configure
make
su
make install
adduser postgres
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
/usr/local/pgsql/bin/createdb test
/usr/local/pgsql/bin/psql test
就是各个操作步骤的命令。不过呢,我还是要读完再动手滴。
依赖
- make,最低版本3.8
- gcc,最低支持c99
- tar,用来解压源码包的
-
GNU Readline,这是允许psql记住所有你输入的命令,并允许你用上下箭头去选择或编辑过去的命令的包。默认是要安装的,也可以使用--without-readline 作为
configure的参数,排除这个功能。作为一个选择,也可以使用libedit,如果安装的时候没找到readline就会自动去找libedit,或者你也可以使用--with-libedit-preferred在confiugre的时候指明。如果在你的linux版本中readline和readline-devel是分开的话,那么他们是同时被需要的。 -
zlib,可以使用--without-zlib来移除这个依赖,同时也无法使用
pg_dump和pg_restore - Perl,这包含了libperl和相应的头文件,最低的Perl版本是5.8.3.自从PL/Perl被当做共享库,libperl基本上被共享到了所有的平台。可以使用perl -V来查看perl的版本。
-
Python,最低版本需要2.4,Python3,如果版本是3.1或者更新的,是被支持的。自从PL/Python被当做共享库,
libpython几乎被共享到了所有平台。 - Tcl,最低版本需要是8.4
- 启用Native Language Support (NLS),使用非英语展示消息将需要这个包的支持。
- OpenSSL,最低版本要求为0.9.8
- Kerberos, OpenLDAP, and/or PAM,如果希望支持身份验证的话
接下来让我们来安装依赖:
yum install make gcc zlib readline readline-devel zlib zlib-devel perl python36 tcl openssl openldap pam
然后,把安装包解压到需要的位置,接下来的流程就是上面的短版本了,基本的过程我们在下面再提供一个版本的命令解说。
./configure #编译
make #构建
make install #安装
adduser postgres #创建postgres用户
mkdir /usr/local/pgsql/data #创建数据目录
chown postgres /usr/local/pgsql/data #对目录赋权
su - postgres #切换用户
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data #初始化数据库
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start #启动数据库服务
/usr/local/pgsql/bin/createdb test #创建数据库
/usr/local/pgsql/bin/psql #进入数据库
ALTER USER postgres WITH PASSWORD '123456'; #修改postgres用户密码
至此,安装完毕
启动和停止
在官方说明文档中我找到了开机启动脚本:
/etc/systemd/system/postgresql.service
[Unit]
Description=PostgreSQL database server
Documentation=man:postgres(1)
[Service]
Type=notify
User=postgres
ExecStart=/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=0
[Install]
WantedBy=multi-user.target
然后执行命令
systemctl enable postgresql.service
systemctl start postgresql.service
结果时执行start的时候死活不返回,但是,使用ps查看进程,却已经启动好了。对于这种情况,官网其实是由说明的,就是脚本里的Type=notify,这个需要在编译的时候启用了--with-systemd才支持,否则的话就是死等了。去掉就对了。只不过如果数据库启动时间非常长,可能就有问题了,后话我们后边再说。












网友评论