携手创作,共同成长!这是我参与「掘金日新计划 · 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/
这里选择了最稳定的14.4版本。
下载对应的 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
配置之后如下图:
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环境准备完毕,通过三方客户端工具可以连接: