Linux CentOS 7 编译安装PostgreSQL 10.1

重启:

su postgres

cd /usr/local/postgresql/bin

./pg_ctl -D /usr/local/postgresql/data/ -l logfile restart

配置编译安装

先去官网下载需要的包

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

首先进入pg压缩包目录通过tar -zxvf ./postgresql-9.5.5.tar.gz进行解压,然后就可以开始编译安装了,进入解压目录,通过./configure --help可以看到编译相关的帮助信息,如下图: 
这里写图片描述

如上图,--prefix=dir可以指定安装目录,还有比如--with-python则可以使用python语法的PL/Python过程语言自定义函数,根据需求我们暂且用不到,所以编译时仅指定一个安装目录即可:

./configure --prefix=/usr/local/postgresql
  • 1

运行编译后发现会提示没有c编译器,是因为新系统的原因,所以安装一个gcc编译器即可:

yum install gcc
  • 1

安装完成后再次编译postgres,发现提示缺少readline库,如下图: 
这里写图片描述

如上图,但是通过rpm -qa | grep readline命令查看可以发现系统默认是自带readline包的,如下图: 
这里写图片描述

那么肯定还是缺少与readline相关的包了,通过yum search readline进行搜索可以发现一个readline-devel包,如下图: 
这里写图片描述

其实我们缺少的正是这个readline开发包(readline-devel),而不是readline包,所以接下来安装一下readline-devel

yum install readline-devel
  • 1

安装完成后再次编译postgresql,还是报错,这次提示缺少zlib库: 
这里写图片描述

同理,缺少的依然是zlib开发包(zlib-devel)而并不是zlib包,所以继续安装zlib-devel:

yum install zlib-devel
  • 1

安装完成后再次编译postgresql,并没有再报error,可以看到提示创建了config.status配置文件: 
这里写图片描述

配置完成了,接下来就可以编译安装了,依次执行:

make
make install
  • 1
  • 2

看到如下提示即可说明编译安装成功: 
这里写图片描述 
这里写图片描述

用户权限与环境变量

编译安装成功后,接下来要做的就是创建一个普通用户,因为默认超级用户(root)不能启动postgresql,所以需要创建一个普通用户来启动数据库,执行以下命令创建用户:

useradd postgres
  • 1

接下来需要设置权限,将postgres的数据目录全部赋权给postgres用户(此处我将postgres的数据目录指定在在/usr/local/postgresql/data目录下):

chown -R postgres:postgres /usr/local/postgresql/
  • 1

最后为了方便起见设置一下相关的环境变量,此处仅仅设置postgres用户的环境变量,所以首先通过su - postgres切换到postgres用户,打开.bash_profile文件并追加以下内容: 
这里写图片描述

修改完成后可以通过source ./.bash_profile使其立即生效,接下来检验一下环境变量是否设置正确,切换任意目录输入which psql以及psql -V即可分别查看psql客户端的路径以及postgresql的数据库版本,如下图: 
这里写图片描述

一切准备就绪之后接下来就可以初始化数据库了。

初始化数据库

由于配置了环境变量,所以此处我们直接执行initdb即可完成db初始化,但在这之前我们可以通过initdb --help看一下初始化相关的帮助信息: 
这里写图片描述

如上图,可以看到在使用initdb进行初始化的同时我们可以指定参数来同时进行一些初始化工作,例如指定pgdata(postgresql数据目录)、指定encoding(编码)、指定数据库超级用户的用户名和密码等等,在最后面我标记出的这段话指出了如果data目录没有指定,则会默认使用环境变量中的PGDATA,由于之前我们刚刚设置了PGDATA环境变量,所以此处我们也就无需再额外指定,最后执行初始化命令即可:

initdb
  • 1

看到如下信息就说明初始化成功了: 
这里写图片描述

同时在postgresql的目录可以看到生成的数据目录data以及该目录的相关数据和配置文件: 
这里写图片描述 
这里写图片描述

如上图,base目录是表空间目录,global目录是相关全局变量的目录,pg_hba.conf和postgresql.conf在之前的博客也都提及了,一个是访问控制配置(127.0.0.1改为信任的客户端ip网段使其可以远程访问),一个是postgresql主配置文件(listen_address=localhost改为星号使其监听整个网络),方便起见我这里将pg_hba.conf的ip地址修改为0.0.0.0/0,而加密方式改为md5,就表示需要密码访问,算是提供一个最低级的安全防护: 
这里写图片描述

而postgresql.conf就像上面说的那样修改一下listen_address使其监听整个网络即可: 
这里写图片描述

猜你喜欢

转载自blog.csdn.net/helloworld_dream/article/details/81483235