PostgreSql的全安装教程(yum,二进制,源码编译)

PostgreSql一般简称为pg,在本文中后续以pg代指,请注意。PostgreSql这个数据库是伯克利大学基于c语言所编写的 对象关系型数据库管理系统(ORDBMS),与MySQL所不同的是,pg是纯c所编写的,而MySQL是c/c#混合编写,由于底层的影响,两者性能是有很多差异的。具体的差异细节不在本文讨论范围。

同大部分开源软件一样,pg也分单机和集群版本,单机的安装方式又分为三种,包管理器安装方式(指的是:在centos,redhat中是yum安装方式,在Ubuntu中是apt安装方式)。二进制源码包安装方式,可编译源码包安装方式,下面介绍在centos/redhat 系统中三种方式安装pg单机版。

真的特别注意的地方:root账号无法运行pg的哦,必须要更换为普通用户,因此,在安装前请新建一个普通用户,通常该普通用户 名称为postgres,在安装以及后续的操作请使用普通账号。

一,yum方式安装

https://www.postgresql.org/download/linux/redhat/ 这个是官方提供的一个yum安装脚本页面。

PostgreSql的全安装教程(yum,二进制,源码编译)_java


 

脚本内容大略分析:首先,生成一个yum源文件,文件内容为pg官方镜像站以及校验地址,其次,执行yum安装命令,包名都替你填好了。最后初始化pg数据库并将pg加入开机启动并启动pg。

需要注意的是,yum源里包括所有版本的pg,查询有哪些pg版本的命令为:

yum  list all | grep postgre  #其中的输出有些需要关注哦,如下:

postgresql-jdbc.noarch                    42.2.18-1.rhel7                pgdg-common
postgresql-jdbc-javadoc.noarch            42.2.18-1.rhel7                pgdg-common

postgresql10-odbc.x86_64                  12.01.0000-1PGDG.rhel7         pgdg10

postgresql96-plpython3.x86_64             9.6.20-1PGDG.rhel7             pgdg96

以上是需要特别关注的,集群的搭建和开发时的java驱动Python驱动就是以上这些或者类似包哦。

postgresql96-server.x86_64                9.6.20-1PGDG.rhel7             pgdg96 #这样的是pg的服务端安装包,yum install  安装它就完了。

二,二进制安装包方式安装

https://www.enterprisedb.com/download-postgresql-binaries  这个是官方的二进制安装包下载地址。

PostgreSql的全安装教程(yum,二进制,源码编译)_java_02

各种操作系统的各种高低版本都有哦,选择合适的版本下载然后上传到服务器。Linux的需要解压。

这样的二进制安装包通常解压就已经可以使用了,但,不是理想的舒服的使用(需要做些设置使得更符合人们的操作习惯哦)。下面介绍简单的配置使得比较舒服优雅的启动并使用pg。

环境变量的配置:

打开 /etc/profile 文件,编辑它,在末尾添加如下内容,然后保存:

PGDATA=/usr/local/pgsql/data
export PGDATA
PGHOME=/usr/local/pgsql
export PGHOME
PATH=$PATH:$PGHOME/bin:$PGDATA
export PATH  PGHOME PGDATA

在本例中,我是将pg包移动到了 /usr/local/pgsql ,并新建文件夹,/usr/local/pgsql/data(需要手动建立,命令为 mkdir -p /usr/local/pgsql/data),并将pg相关的文件赋权给postgres这个用户(命令为: chown -Rf postgres. /usr/local/pgsql)。

需要特别强调的一点是:pg不同于MySQL的安装,配置文件都在新建目录/usr/local/pgsql/data内,该文件夹的内容将在执行完数据库初始化命令后出现,其中的文件有三个需要重点关注:

PostgreSql的全安装教程(yum,二进制,源码编译)_数据库_03


 

环境变量和文件属组配置好就可以初始化数据库了(切换用户为普通用户postgres),命令为   initdb ,什么参数都不用加,该程序会自动通过环境变量定位/usr/local/pgsql/data。

PostgreSql的全安装教程(yum,二进制,源码编译)_java_04

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

    pg_ctl -D /usr/local/pgsql/data -l logfile start
(说明一下,日志文件无关紧要,因为日志内容十分少,可以忽略,因此不需要指定。-D参数也不需要,因为环境变量里已经包含了。)

pg的server启动命令为:pg_ctl start|stop|restart|status

远程连接的设置为:

vim /usr/local/pgsql/data/pg_hba.conf

# IPv4 local connections:
host    all             all             0.0.0.0/0                 trust  #这一行表示 ,修改成任意客户端可以连接该数据库

vim /usr/local/pgsql/data/postgresql.conf

listen_addresses = '*'          # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
port = 5432     #server监听客户端的范围为所有客户端,监听端口为5432.

修改完毕后,重启 server,命令为 pg_ctl restart  ,执行完毕后即可任意客户端连接pg了,例如,pgadmin,navicat现在都可以连接pg了。(默认密码为空的,我没有设置密码)

PostgreSql的全安装教程(yum,二进制,源码编译)_python_05

 至此,二进制安装pg完毕。

三,源码编译安装pg

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

下载的版本为9.5.24,官网提供两种源码包,一个是后缀tar.bz2 ,一个是后缀tar.gz,前者压缩率更高,容量更小,仅此而已。下载完毕后上传至服务器,并解压,移动文件夹到 /usr/local/src

[root@centos7 postgresql-9.5.24]# pwd
/usr/local/src/postgresql-9.5.24

(1)编译环境,也就是编译时所需的依赖

./configure 这个阶段一般称为预编译阶段,在执行以下命令前需要编译环境,编译需要的依赖如下:gcc编译器,readline-devel,zlib,zlib-devel,make,可能pg的高版本需要更高的gcc版本,目前没有试验,因为现在使用的版本为9.5.24版本。环境依赖安装命令如下:yum install readline-devel zlib zlib-devel gcc make -y

 

(2)运行环境的设置

  #和二进制安装一样,也需要设置环境变量,普通用户,用户名为postgres,并为普通用户设置密码。

进入目录:cd /usr/local/src/postgresql-9.5.24

./configure --prefix=/usr/local/pgsql  && make && make install #执行预编译和编译安装步骤,这时使用的用户是root用户,所以编译生成的文件都是root用户属组,需要更改属组为postgres用户

(3)编译后的属组改变

chown -Rf postgres. /usr/local/pgsql

(4)pg自启动脚本的使用

源码包内自带有启动脚本,该脚本路径如下:

[root@centos7 start-scripts]# pwd
/usr/local/src/postgresql-9.5.24/contrib/start-scripts
[root@centos7 start-scripts]# ll
total 8
-rw-r--r-- 1 1107 1107 1529 Nov 10 06:34 freebsd
-rw-r--r-- 1 1107 1107 3642 Nov 10 06:34 linux
drwxrwxrwx 2 1107 1107   84 Nov 10 06:45 macos
drwxrwxrwx 2 1107 1107   87 Nov 10 06:45 osx

cp /usr/local/src/postgresql-9.5.24/contrib/start-scripts/linux /etc/init.d/pgsql  &&chmod +x /etc/init.d/pgsql && chown -Rf /etc/init.d/pgsql #复制启动脚本到自启动目录下并赋予可执行权限,并将属组更改为postgres用户。

该脚本内使用的变量要和环境变量设置的一一对应,环境变量的设置如下: vim  /etc/profile

PGDATA=/usr/local/pgsql/data
export PGDATA
PGHOME=/usr/local/pgsql
export PGHOME
PATH=$PATH:$PGHOME/bin:$PGDATA
export PATH PGDATA

(5)初始化pg的数据库

由于环境变量已经设置好了,因此 直接执行  initdb 即可。(这一步类似二进制安装),这里需要使用普通用户执行这个命令。

(6)使用启动脚本管理pg服务的启停以及状态查询

service pgsql start |stop |status |restart

(7)日志的问题说明

pg的日志内容十分简单,目录在PGDATA下名称为serverlog

以上为三种pg的单机模式安装方式。