简述
以前用习惯了MySQL,来到新公司开始接触PostgreSQL,这个名字读起来可真拗口呀。
鉴于MySQL和PostgreSQL都是目前比较流行的开源免费数据库,也被各个互联网公司广泛使用,甚至一些传统型的公司也开始放弃Oracle,转投MySQL和PostgreSQL的怀抱。
至于两者之间的比较和对比,由于初次接触PostgreSQL,暂时还不便评论,先从最初始的安装走起。
环境准备
Host List
IP Address | Hosts | Disk | Comment |
---|---|---|---|
192.168.0.22 | db | 1TB | Database Host |
OS
我们采用CentOS作为宿主机操作系统,版本请升级为最新稳定版7.6。(CentOS7即可,建议升级到最新稳定版7.6)
升级方式,请参考本人的另一篇文章:https://www.jianshu.com/p/3e3bc1f51332
并将内核升级到最新稳定版本4.20.
[root@localhost ~]# uname -sr
Linux 4.20.0-1.el7.elrepo.x86_64
[root@localhost ~]#
[root@localhost ~]#
安装步骤
看了PG的官网,本来准备安装最新的PG12,结果官网说PG12现在刚刚做了崩溃测试,甚至还没有Alpha和Beta测试,建议继续使用PG10,那我们就老老实实的继续PG10吧。
下载安装
首先安装yaml包
yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm
安装PG Server。
yum install postgresql10-contrib postgresql10-server -y
此时,进入到/usr目录应该可以看到PG10的目录。
[root@localhost usr]# ls -al
total 176
drwxr-xr-x. 14 root root 4096 Dec 28 13:50 .
dr-xr-xr-x. 17 root root 4096 Jan 7 15:09 ..
dr-xr-xr-x. 2 root root 28672 Dec 28 13:50 bin
drwxr-xr-x. 2 root root 6 Apr 11 2018 etc
drwxr-xr-x. 2 root root 6 Apr 11 2018 games
drwxr-xr-x. 3 root root 22 Apr 11 2018 include
dr-xr-xr-x. 47 root root 8192 Dec 28 10:45 lib
dr-xr-xr-x. 53 root root 36864 Dec 28 11:29 lib64
drwxr-xr-x. 25 root root 4096 Dec 28 10:45 libexec
drwxr-xr-x. 12 root root 4096 Apr 11 2018 local
drwxr-xr-x 6 root root 48 Dec 28 13:50 pgsql-10
dr-xr-xr-x. 2 root root 16384 Dec 28 11:29 sbin
drwxr-xr-x. 118 root root 4096 Dec 28 11:29 share
drwxr-xr-x. 4 root root 32 Apr 11 2018 src
lrwxrwxrwx 1 root root 10 Dec 28 10:43 tmp -> ../var/tmp
[root@localhost usr]#
至此已安装完毕,接下来我们对数据库进行初始化。
初始化数据库
准备数据库存储目录
由于PG会默认采用/data作为数据库数据文件存储路径,我们运维把磁盘空间全部mount到/home目录,暂时不能重新mount,如果是自己的环境,可以重新规划磁盘。所以我们需要将PG的数据盘符路径调整到/home目录下。重申:这是研发测试环境,如果生产环境,还请采用标准的磁盘规划。
[root@localhost ~]# mkdir /home/postgresql
[root@localhost ~]# mkdir /home/postgresql/data
增加PG相关用户并赋权
我们需要创建PG的专属用户,并将PG相关的目录全部转归该用户下。
yum安装postgresql,默认会建一个名为”postgres”的系统账号,用于执行PostgreSQL;
可以查询下,如果没有创建,则手工创建下。
[root@localhost ~]# useradd postgres
useradd: user 'postgres' already exists
[root@localhost ~]#
调整相关目录的权限。
[root@localhost ~]# chown -R postgres:postgres /home/postgresql
[root@localhost ~]# chmod 750 -R /home/postgresql
[root@localhost ~]# chown -R postgres:postgres /usr/pgsql-10
修改Root用户的profile,增加PG相关的环境变量。
[root@localhost ~]# vi .bash_profile
export LD_LIBRARY_PATH=/usr/pgsql-10/bin
export PGDATA=/home/postgresql/data
修改postgres用户的环境变量。
[root@localhost ~]# su postgres
bash-4.2$ cd ~
bash-4.2$ ls -al
total 16
drwx------ 3 postgres postgres 75 Dec 28 14:28 .
drwxr-xr-x. 41 root root 4096 Dec 28 13:50 ..
drwx------ 4 postgres postgres 31 Dec 28 13:50 10
-rw------- 1 postgres postgres 500 Dec 28 14:28 .bash_history
-rwx------ 1 postgres postgres 265 Dec 28 14:02 .bash_profile
-rw------- 1 postgres postgres 23 Dec 28 14:28 .psql_history
bash-4.2$ vi .bash_profile
[ -f /etc/profile ] && source /etc/profile
PGDATA=/home/postgresql/data
export PGDATA
......
执行初始化。
bash-4.2$ cd /usr/pgsql-10/bin
bash-4.2$ ./postgresql-10-setup initdb
设置自启动
退出postgres用户,用root用户执行如下命令。
[root@localhost ~]# systemctl enable postgresql-10
修改PG启动的参数,修改PGDATA路径。
[root@localhost ~]# vi /usr/lib/systemd/system/postgresql-10.service
......
# Location of database directory
Environment=PGDATA=/home/postgresql/data/
......
[root@localhost ~]# systemctl restart postgresql-10
[root@localhost ~]# systemctl status postgresql-10
● postgresql-10.service - PostgreSQL 10 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-10.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2019-01-07 15:08:58 CST; 20h ago
Docs: https://www.postgresql.org/docs/10/static/
Process: 15371 ExecStartPre=/usr/pgsql-10/bin/postgresql-10-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
Main PID: 15410 (postmaster)
Tasks: 8
Memory: 15.8M
查看PG的状态为active running,就说明PG启动完成。
修改PG的运行参数
经过上面的步骤,我们的PG Server已可以启动,只是还只能本机访问。接下来我们对PG进行参数调整。
找到PG Data的目录,然后修改其中的postgresql.conf.
......
listen_addresses = '*'
......
由于本例为研发测试环境,不做生成环境用,参数调整就不做详细展开了。
重启PG。
[root@localhost ~]# systemctl restart postgresql-10
创建Schema和用户
注意替换自己的数据库用户密码。
bash-4.2$ psql
psql (10.6)
Type "help" for help.
postgres=# CREATE USER harbor WITH PASSWORD '******';
CREATE ROLE
postgres=#
postgres=# CREATE DATABASE harbor OWNER harbor;
CREATE DATABASE
postgres=# GRANT ALL PRIVILEGES ON DATABASE harbor TO harbor;
GRANT
postgres=#