CentOS搭建:PostgreSQL

12/31/2024 运维操作系统Linux

目录


参考:


# CentOS搭建:PostgreSQL

# 环境依赖

软件/系统 版本 架构 包名 备注
Linux CentOS 7.x x86_64 libzstd-1.5.2-1.el7.x86_64.rpm (opens new window) 依赖库
libicu-50.2-4.el7_7.x86_64.rpm (opens new window) 依赖库
postgresql15-libs-15.7-1PGDG.rhel7.x86_64.rpm (opens new window) lib库
postgresql15-15.7-1PGDG.rhel7.x86_64.rpm (opens new window) 客户端
postgresql15-server-15.7-1PGDG.rhel7.x86_64.rpm (opens new window) 服务端

# 创建用户

# 创建用户
useradd postgres
# 设置密码:ps@at3721
passwd postgres
# 查看用户
id postgres
1
2
3
4
5
6

# 安装离线包

# 安装依赖
rpm -ivh libzstd-1.5.2-1.el7.x86_64.rpm
rpm -ivh libicu-50.2-4.el7_7.x86_64.rpm
# 安装lib库
rpm -ivh postgresql15-libs-15.7-1PGDG.rhel7.x86_64.rpm
# 安装客户端
rpm -ivh postgresql15-15.7-1PGDG.rhel7.x86_64.rpm
# 安装服务端  
rpm -ivh postgresql15-server-15.7-1PGDG.rhel7.x86_64.rpm
1
2
3
4
5
6
7
8
9
# 验证数据库安装
psql --version
psql -V
1
2
3
#卸载: 先停止postges服务,然后执行下面的命令即可
rpm -qe postgresql15-libs-15.7-1PGDG.rhel7.x86_64.rpm
rpm -qe postgresql15-15.7-1PGDG.rhel7.x86_64.rpm
rpm -qe postgresql15-server-15.7-1PGDG.rhel7.x86_64.rpm
1
2
3
4

# 初始化数据库

/usr/pgsql-15/bin/postgresql-15-setup initdb
1

# 启动数据库

# 设置开机启动
systemctl enable postgresql-15
# 启动数据库
systemctl start postgresql-15   
# 查看启动状态
systemctl status postgresql-15 
# 查看数据库进程
ps -ef | grep postgre
1
2
3
4
5
6
7
8

# 移动数据目录

# 创建目录
mkdir -p /data/pgsql/  
# 停止数据库
systemctl stop postgresql-15
1
2
3
4
# 移动数据到目录
mv /var/lib/pgsql/15/* /data/pgsql/
# 修改目录的所有用户
chown -R postgres:postgres /data/pgsql/
# 修改目录的操作权限
chmod -R 700 /data/pgsql/data 
1
2
3
4
5
6
cp /usr/lib/systemd/system/postgresql-15.service /usr/lib/systemd/system/postgresql-15.service.bak20240703
ll -a /usr/lib/systemd/system/ |grep postgresql
# 修改指定的数据目录
vi /usr/lib/systemd/system/postgresql-15.service 
1
2
3
4
Environment=PGDATA=/data/pgsql/data/
1
cp /data/pgsql/data/postgresql.conf /data/pgsql/data/postgresql.conf.bak20240703
ll -a /data/pgsql/data/ |grep postgresql
# 修改配置的数据目录
vi /data/pgsql/data/postgresql.conf
1
2
3
4
data_directory = '/data/pgsql/data'
1
# 重新加载配置文件
systemctl daemon-reload
# 重启数据库
systemctl restart postgresql-15
#确认启动成功
systemctl status postgresql-15
ps -ef | grep postgres 
1
2
3
4
5
6
7

# 修改数据库用户密码

# 切换到用户postgres
su postgres
1
2
# 登录到postgresql
psql
1
2

以下为postgresql控制台命令:

# 执行命令
ALTER ROLE postgres WITH PASSWORD 'psAat3721';
# 退出
\q
1
2
3
4

# 修改授权,远程连接

# 修改连接认证

pg_hba.conf(Host-Based Authentication configuration file)用于定义客户端如何连接到 PostgreSQL 服务器以及这些连接需要哪些认证方式。这个文件允许数据库管理员为不同类型的连接设置不同的认证策略,以确保数据库的安全性。

image-20240704232733024

  • TYPE:连接类型,比如 local(Unix 域套接字连接)、host(TCP/IP 连接,包括 SSL)、hostssl(仅通过 SSL 的 TCP/IP 连接)、hostnossl(不通过 SSL 的 TCP/IP 连接,但通常不推荐使用,因为安全性较低)。
  • DATABASE:数据库名称,或者使用 all 代表所有数据库,sameuser 代表与用户名相同的数据库名,samerole 代表与用户角色相同的数据库名,replication 代表复制连接。
  • USER:用户名,或者使用 all 代表所有用户。
  • ADDRESS:客户端的 IP 地址或子网掩码,或者使用 all 代表所有地址。对于 Unix 域套接字连接,此字段被忽略,通常写为 samehost
  • METHOD:认证方法,如 trust(无需密码)、reject(直接拒绝连接)、md5(使用 MD5 加密的密码)、scram-sha-256(一种更安全的密码认证方法)、password(明文密码,但在实际传输中使用 MD5 加密)等。
# 备份
cp /data/pgsql/data/pg_hba.conf /data/pgsql/data/pg_hba.conf.bak20240703
ll -a /data/pgsql/data/ |grep pg_hba
# 修改数据库连接安全认证
vi /data/pgsql/data/pg_hba.conf
1
2
3
4
5
# 增加一行
host    all             all             0.0.0.0/0               md5
1
2

# 修改连接地址

# 备份
cp /data/pgsql/data/postgresql.conf /data/pgsql/data/postgresql.conf.bak20240703.2
ll -a /data/pgsql/data | grep postgresql
# 修改
vi /data/pgsql/data/postgresql.conf
1
2
3
4
5
listen_addresses = '*'
#有需求修改port
#port = 5432 
1
2
3

# 重启配置生效

# 重新加载配置文件
systemctl daemon-reload
# 重启数据库
systemctl restart postgresql-15
#确认启动成功
systemctl status postgresql-15
ps -ef | grep postgres 
1
2
3
4
5
6
7

# 远程连接数据库

Navicat连接postgresql数据库

问题: 错误: 字段datlastsysoid不存在(报错)

说明: Postgres 15 从表中删除了 datlastsysoid 字段,因此 Navicat 15.0.29 或 16.1 之前的任何版本在查找此已弃用字段时都会引发此错误。

解决:

方式一: 要解决此问题,请升级到最新的 Navicat 15.0.29 或 16.1 及更高版本(可能需要新的许可证)

方式二(use):

​ 打开 Navicat 文件夹(通常在 C:\Program Files\PremiumSoft\Navicat…) 下),找到 libcc.dll 并创建此文件的备份。在任何十六进制编辑器中打开此文件,如果需要,您可以使用在线工具,例如 https://hexed.it/。 在文件中搜索“SELECT DISTINCT datlastsysoid”,并将其替换为“SELECT DISTINCT dattablespace”。 将文件保存在原始位置。如果遇到任何安全问题,请将其另存为“.txt”文件,然后将其重命名为“.dll”。

# 常用的数据库命令

# 切换到用户postgres
su postgres
#进入postgresql命令行      
psql  
1
2
3
4

postgresql命令行:

# 退出 or: exit;
\q   
# 列出所有用户, 指令显示用户和用户的用户属性
\du  
# 列出所有库
\l   
# 列出库下所有表
\d 
# 查看索引
\di  
# 列举表, 相当于mysql的show tables
dt   
# 查看模式schema列表
\dn  
# 查看模式schema列表详情
\dn+ 
 # 显示用户访问权限,或 \dp 
\z 
 # 切换数据库,相当于mysql的use dbname
\c dbname 
# 查看表结构, 相当于desc tblname,show columns from tbname
\d tblname 
# 删除数据库
DROP DATABASE phone; 
# 指令查看全部可设置的管理权限
\h CREATE ROLE 
# 显示所有可设置的访问权限 
\h GRANT 

# 查看详细信息
select version();
# 查看版本信息
show server_version;
# 查看数字版本信息包括小版号
SHOW server_version_num;
# 或
SELECT current_setting('server_version_num');
# 返回类型为text,如果需要可以转换为interger:
SELECT current_setting('server_version_num')::integer;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 创建表(大小写均可)
create table test(id integer not null primary key);
# 添加表的字段
alter table phone add column phone_number character varying(11) not null;
# 重命名一个表
alter table [表名A] rename to [表名B]; 
# 删除一个表
drop table [表名];
1
2
3
4
5
6
7
8
上次更新时间: 9/25/2024, 1:19:15 AM