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安装脚本页面。
脚本内容大略分析:首先,生成一个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 这个是官方的二进制安装包下载地址。
各种操作系统的各种高低版本都有哦,选择合适的版本下载然后上传到服务器。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内,该文件夹的内容将在执行完数据库初始化命令后出现,其中的文件有三个需要重点关注:
环境变量和文件属组配置好就可以初始化数据库了(切换用户为普通用户postgres),命令为 initdb ,什么参数都不用加,该程序会自动通过环境变量定位/usr/local/pgsql/data。
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了。(默认密码为空的,我没有设置密码)
至此,二进制安装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的单机模式安装方式。