PostgreSQL14.4基于CentOS7的编译安装过程

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情

由于在工作的过程中要使用到PostgreSQL数据库,因此决定在linux服务器上进行安装。

1.环境

1.1 服务器及操作系统

操作系统为:

机器名 IP 操作系统 内存 磁盘
m162p202 192.168.162.202 CentOS Linux release 7.7.1908 8G 1T

由于是虚拟机环境,因此CPU的配置就不重要了。

1.2 软件

通过源码安装,PostgreSQL的下载地址为:www.postgresql.org/ftp/source/

image.png 这里选择了最稳定的14.4版本。

image.png 下载对应的 postgresql.tar.gz文件。 并上传到服务器 /opt/software目录。

2.编译

依赖准备:

yum install -y cmake gcc gcc-c++ perl readline readline-devel openssl openssl-devel zlib zlib-devel ncurses-devel

解压文件:

[root@m162p202 software]# tar -zxvf postgresql-14.4.tar.gz 

之后,创建主目录并进入:

root@m162p202 opt]# mkdir /opt/postgreSQL
[root@m162p202 opt]# cd /opt/postgreSQL/
[root@m162p202 postgreSQL]# 

执行configure

[root@m162p202 postgreSQL]# /opt/software/postgresql-14.4/configure --prefix=/opt/postgreSQL

configure的主要参数有:

  • --prefix=prefix 安装到prefix指向的目录;默认为/usr/local/pgsql
  • --bindir=dir 安装应用程序到dir;默认为prefix/bin
  • --with-docdir=dir 安装文档到dir;默认为prefix/doc
  • --with-pgport=port 设置默认的服务器端网络连接服务TCP端口号
  • --with-tcl 为服务端提供Tcl存储过程支持
  • --with-perl 为服务端提供Perl存储过程支持
  • --with-python 为服务端提供Python存储过程支持

成功之后,在这个目录执行make 和install

[root@m162p202 postgreSQL]# make

之后执行install

[root@m162p202 postgreSQL]# make install

3.创建用户

创建用户:

[root@m162p202 postgreSQL]# useradd postgresql

改变postgreSQL目录权限:

[root@m162p202 postgreSQL]# chown -R postgresql:postgresql /opt/postgreSQL

4.环境变量

修改/etc/profile文件:

[root@m162p202 postgreSQL]# vim /etc/profile

在文件莫问添加如下2行内容:

export PGHOME=/opt/postgreSQL\
export PATH=$PATH:$PGHOME/bin

配置环境变量后,执行该命令使环境变量生效:

[root@m162p202 postgreSQL]# source /etc/profile

5.初始化数据库

切换用户

[root@m162p202 postgreSQL]# sudo su - postgresql
Last login: Wed Aug  3 13:10:25 CST 2022 on pts/0

初始化创建数据库:

[postgresql@m162p202 ~]$ /opt/postgreSQL/bin/initdb -D /opt/postgreSQL/data -U postgresql

参数主要有:

  • -D 指定数据库数据位置。不能为空。也可以设置环境变量PGDATA来替换-D选项。
  • -U 选择数据库superuser的用户名。这默认为运行initdb的用户的名称。
  • -W 对于新的超级用户提示输入口令
  • -E 指定数据库编码,一般为UTF8。这也是您稍后创建的任何数据库的默认编码

配置数据库服务:

[postgresql@m162p202 ~]$ vim /opt/postgreSQL/data/postgresql.conf

修改如下内容:

#设置这个数据库绑定所有ip地址(如:127.0.0.0,ipv4,ipv6)
listen_addresses = '*'
#PostgreSQL数据库服务 TCP 监听的端口
port = 5432 #PostgreSQL数据库服务 TCP 监听的端口
#打开日志收集开关,便于查看日志,发现错误问题
logging_collector = on
#日志存放目录
log_directory = '/opt/postgreSQL/log'

配置数据库访问权限:

[postgresql@m162p202 ~]$ vim /opt/postgreSQL/data/pg_hba.conf
#表示允许任何ip地址都可以连接这台数据库
0.0.0.0/0
#表示用户远程连接这台数据库,密码使用md5加密
md5

配置之后如下图:

image.png

6.启动数据库

数据库操作命令如下:

#启动数据库
2022-08-03 14:15:20.636 CST [7902] HINT:  Future log output will appear in directory "/opt/postgreSQL/log".
 done
server started

#重启数据库
[postgresql@m162p202 ~]$ pg_ctl -D /opt/postgreSQL/data restart
waiting for server to shut down.... done
server stopped
waiting for server to start....2022-08-03 14:15:28.191 CST [7918] LOG:  redirecting log output to logging collector process
2022-08-03 14:15:28.191 CST [7918] HINT:  Future log output will appear in directory "/opt/postgreSQL/log".
 done
server started

#查看数据库状态
[postgresql@m162p202 ~]$ pg_ctl -D /opt/postgreSQL/data status
pg_ctl: server is running (PID: 7918)
/opt/postgreSQL/bin/postgres "-D" "/opt/postgreSQL/data"

#停止数据库
[postgresql@m162p202 ~]$ pg_ctl -D /opt/postgreSQL/data stop
waiting for server to shut down.... done
server stopped
[postgresql@m162p202 ~]$ pg_ctl -D /opt/postgreSQL/data start
waiting for server to start....2022-08-03 14:15:20.636 CST [7902] LOG:  redirecting log output to logging collector process

7.创建测试库

登陆pg 创建一个数据库:

# 登陆pg
[postgresql@m162p202 data]$ psql -U postgresql -d postgres -h 192.168.162.202 -p 5432
Password for user postgresql: 
psql (14.4)
Type "help" for help.
#创建用户pguser 密码 123456
postgres=# create user pguser with password '123456';
CREATE ROLE
# 创建一个测试数据库 testdb
postgres=#  create database testdb owner pguser;
CREATE DATABASE
# 授权
postgres=# grant all privileges on database testdb to pguser;
GRANT
# 查看用户
postgres=# \du
                                    List of roles
 Role name  |                         Attributes                         | Member of 
------------+------------------------------------------------------------+-----------
 pguser     |                                                            | {}
 postgresql | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

#查看数据库
postgres=# \l
                                     List of databases
   Name    |   Owner    | Encoding |   Collate   |    Ctype    |     Access privileges     
-----------+------------+----------+-------------+-------------+---------------------------
 postgres  | postgresql | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgresql | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgresql            +
           |            |          |             |             | postgresql=CTc/postgresql
 template1 | postgresql | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgresql            +
           |            |          |             |             | postgresql=CTc/postgresql
 testdb    | pguser     | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/pguser               +
           |            |          |             |             | pguser=CTc/pguser
(4 rows)

8.忘记密码的解决办法

如果PostgreSQL忘记了用户的登陆密码,解决办法如下:

vim /opt/postgreSQL/data/pg_hba.conf

将md5 改为trust 之后重启数据库:

[postgresql@m162p202 data]$ pg_ctl -D /opt/postgreSQL/data restart
waiting for server to shut down.... done
server stopped
waiting for server to start....2022-08-03 14:47:55.919 CST [9857] LOG:  redirecting log output to logging collector process
2022-08-03 14:47:55.919 CST [9857] HINT:  Future log output will appear in directory "/opt/postgreSQL/log".
 done
server started

然后就可以登陆,并通过alter语句修改:

[postgresql@m162p202 data]$ psql -U postgresql -d postgres -h 192.168.162.202 -p 5432
psql (14.4)
Type "help" for help.
postgres=# 
postgres=# ALTER USER postgresql WITH PASSWORD 'postgres';
ALTER ROLE
postgres=# 

之后再将pg_hba.conf文件的trust改为MD5,重启即可。

[postgresql@m162p202 data]$ pg_ctl -D /opt/postgreSQL/data restart
waiting for server to shut down.... done
server stopped
waiting for server to start....2022-08-03 14:51:35.245 CST [10101] LOG:  redirecting log output to logging collector process
2022-08-03 14:51:35.245 CST [10101] HINT:  Future log output will appear in directory "/opt/postgreSQL/log".
 done
server started
[postgresql@m162p202 data]$ psql -U postgresql -d postgres -h 192.168.162.202 -p 5432
Password for user postgresql: 
psql (14.4)
Type "help" for help.

postgres=# 

9.客户端连接测试

至此,PG环境准备完毕,通过三方客户端工具可以连接:

image.png

猜你喜欢

转载自juejin.im/post/7127544215008968718
今日推荐