centos7系统下postgresql15离线安装,卸载

1. 创建postgres用户

复制代码
#[root@VMTest postgresql16]# useradd -g postgres postgres
[root@VMTest postgresql16]# useradd postgres

插曲:在线YUM安装

在线安装参考: PostgreSQL: Linux downloads (Red Hat family)

2. 下载并安装离线rpm包

2.1 从 postgresql官网下载相应rpm离线安装包:

注意:

centos7只支持 rhel-7字眼的目录。

下载地址: Index of /pub/repos/yum/15/redhat/rhel-7.12-x86_64/

2.2 需要下载的安装包有:

复制代码
libzstd-1.5.2-1.el7.x86_64.rpm
postgresql15-15.5-1PGDG.rhel7.x86_64.rpm
libicu-50.2-4.el7_7.x86_64.rpm(可能需要)
postgresql15-libs-15.5-1PGDG.rhel7.x86_64.rpm
postgresql15-server-15.5-1PGDG.rhel7.x86_64.rpm

#其中, libicu-50.1.2-17.el7.x86_64.rpm的下载地址是
#https://centos.pkgs.org/7/centos-x86_64/libicu-50.1.2-17.el7.x86_64.rpm.html
# http://mirror.centos.org/centos/7/os/x86_64/Packages/libicu-50.2-3.el7.x86_64.rpm
http://mirror.centos.org/centos/7/os/x86_64/Packages/libicu-50.2-4.el7_7.x86_64.rpm

# 下载
$. wget https://koji.xcp-ng.org/kojifiles/packages/zstd/1.5.2/1.el7/x86_64/libzstd-1.5.2-1.el7.x86_64.rpm

$. wget https://download.postgresql.org/pub/repos/yum/15/redhat/rhel-7.12-x86_64/postgresql15-15.5-1PGDG.rhel7.x86_64.rpm

$. wget http://mirror.centos.org/centos/7/os/x86_64/Packages/libicu-50.2-4.el7_7.x86_64.rpm

$. wget https://download.postgresql.org/pub/repos/yum/15/redhat/rhel-7.12-x86_64/postgresql15-libs-15.5-1PGDG.rhel7.x86_64.rpm

$. wget https://download.postgresql.org/pub/repos/yum/15/redhat/rhel-7.12-x86_64/postgresql15-server-15.5-1PGDG.rhel7.x86_64.rpm

2.3 安装下载的离线rpm包

将上述下载的rpm包上传到centos7上, 并使用rpm -ivh 进行安装:

复制代码
[root@VMTest ~]# rpm -ivh libzstd-1.5.2-1.el7.x86_64.rpm
[root@VMTest ~]# rpm -ivh libicu-50.2-4.el7_7.x86_64.rpm
# 安装lib库
[root@VMTest ~]# rpm -ivh postgresql15-libs-15.5-1PGDG.rhel7.x86_64.rpm
# 安装客户端
[root@VMTest ~]# rpm -ivh postgresql15-15.5-1PGDG.rhel7.x86_64.rpm
# 安装服务端  
[root@VMTest ~]# rpm -ivh postgresql15-server-15.5-1PGDG.rhel7.x86_64.rpm
 
#ps:如果要卸载的话, 先停止postges服务,然后执行下面的命令即可
[root@VMTest ~]# rpm -qe postgresql15-libs-15.5-1PGDG.rhel7.x86_64.rpm
[root@VMTest ~]# rpm -qe postgresql15-15.5-1PGDG.rhel7.x86_64.rpm
[root@VMTest ~]# rpm -qe postgresql15-server-15.5-1PGDG.rhel7.x86_64.rpm

3. 初始化数据库

复制代码
[root@VMTest ~]# /usr/pgsql-15/bin/postgresql-15-setup initdb
Initializing database ... OK

4. 设置开机启动,启动数据库

复制代码
[root@VMTest ~]# systemctl enable postgresql-15 --now  #设置开机启动
[root@VMTest ~]# systemctl status postgresql-15 
[root@VMTest ~]# systemctl start postgresql-15   #启动postgresql
 
#查看启动效果
方法一:
[root@VMTest ~]# ps -ef | grep postgre

#方法二:
[root@VMTest ~]# systemctl status postgresql-15

5. 移动数据库到指定目录

5.0 前提条件

复制代码
# 移动前须先执行命令:
  1. mkdir -p /data/pgsql/  
  2. chown postgres:postgres -R /data/pgsql
  3. systemctl stop postgresql-15

5.1 移动目录

复制代码
[root@VMTest ~]# mv /var/lib/pgsql/15/* /data/pgsql/
[root@VMTest ~]# chown -R postgres:postgres /data/pgsql/
[root@VMTest ~]# chmod 700 /data/pgsql/data -R

5.2 修改配置文件

复制代码
#a.修改指定的数据目录
[root@VMTest ~]# vi /usr/lib/systemd/system/postgresql-15.service 
#修改Environment=PGDATA=/var/lib/pgsql/15/data/为
  Environment=PGDATA=/data/pgsql/data/
 
#b.修改数据目录
[root@VMTest ~]# vi /data/pgsql/data/postgresql.conf
#修改data_directory:
 data_directory = '/data/pgsql/data'
 
其它配置修改:
log_directory = 'log'  
max_connections = 100 

5.3 重新加载配置文件,重启数据库

复制代码
[root@VMTest ~]# systemctl daemon-reload
[root@VMTest ~]# systemctl restart postgresql-15
[root@VMTest ~]# ps -ef | grep postgres  #确认启动成功
[root@VMTest ~]# systemctl status postgresql-15

6. 修改密码

复制代码
[root@VMTest ~]# su postgres
[postgres@VMTest root]$ psql
could not change directory to "/root": Permission denied
psql (11.1)
Type "help" for help.
 
postgres=# 
 
#------------------------------------------------------
# 执行命令
postgres=# ALTER ROLE postgres WITH PASSWORD '123abc';
# 退出
postgres=# \q

7. 修改授权

7.1 设置远程连接

复制代码
#修改1, ps:认证方式解释见附录
# [postgres@VMTest root]$ vi /var/lib/pgsql/15/data/pg_hba.conf
[postgres@VMTest root]$ vi /data/pgsql/data/pg_hba.conf
# IPv4 local connections: 
#host    all             all             127.0.0.1/32            ident
host    all             all             0.0.0.0/0                 md5
 
#new
host    all             all             0.0.0.0/0               trust
 
#修改2
# [root@vmfiend01 ~]# vi /var/lib/pgsql/15/data/postgresql.conf
[root@vmfiend01 ~]# vi /data/pgsql/data/postgresql.conf
#修改listen_addresses 
listen_addresses = '*'
#有需求修改port
#port = 5432 
 
#重启数据库
[root@VMTest ~]# systemctl restart postgresql-15

8. 创建数据库

8.1 创建数据库

复制代码
[root@VMTest ~]# su postgres
[postgres@VMTest root]$ psql
postgres=# create database databasename;

8.2 查看数据库列表

复制代码
postgres=# \l

8.3 进入数据库

复制代码
postgres=# \c databasename;

8.4 进入数据库后,查看数据库

复制代码
postgres=# \d 

8.5 创建模式schema

复制代码
deepcogni=# create schema test1;

navicat连接时会遇到以下问题, 解决方式如下:

复制代码
问题:
    错误: 字段"datlastsysoid"不存在(Navicat报错)

说明:    
    查阅一下资料,Postgres 15 从表中删除了 datlastsysoid 字段pg_database,因此 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"。       

9. 常用的数据库命令

复制代码
[root@VMTest ~]# su postgres
[postgres@VMTest root]$ psql  #进入postgresql命令行
 
postgres=# \q   # 退出 or: exit;
postgres=# \l   # 列出所有库
postgres=# \du  # 列出所有用户, 指令显示用户和用户的用户属性
postgres=# \d   # 列出库下所有表
postgres=# \di  # 查看索引
postgres=# dt   # 列举表, 相当于mysql的show tables
postgres=# \dn  # 查看模式schema列表
postgres=# \dn+ # 查看模式schema列表详情
 
postgres=# \z 或 \dp  # 显示用户访问权限
postgres=# \c dbname  # 切换数据库,相当于mysql的use dbname
postgres=# \d tblname # 查看表结构, 相当于desc tblname,show columns from tbname
 
postgres=# DROP DATABASE phone; # 删除数据库
 
# 指令查看全部可设置的管理权限
postgres=# \h CREATE ROLE 
 
# 显示所有可设置的访问权限 
postgres=# \h GRANT 
 
 
# 创建表(大小写均可)
deepcogni=# create table test(id integer not null primary key);
 
# 添加表的字段
deepcogni=# alter table phone add column phone_number character varying(11) not null;
 
# 重命名一个表
deepcogni=# alter table [表名A] rename to [表名B]; 
 
# 删除一个表
deepcogni=# drop table [表名];

9.1 查看版本信息

复制代码
# 1.查看客户端版本
[root@BC-VM-d20d ~]# psql --version
 
# 2.查看服务器端版本
# 2.1 查看详细信息
postgres=# select version();
 
# 2.2 查看版本信息
postgres=# show server_version;
 
# 2.3 查看数字版本信息包括小版号
postgres=# SHOW server_version_num;
# 或
postgres=# SELECT current_setting('server_version_num');
 
# 3.注意事项
postgres=# SELECT current_setting('server_version_num');
 
# 返回类型为text,如果需要可以转换为interger:
postgres=# SELECT current_setting('server_version_num')::integer;

10. 用户和权限管理

10.1 登录

方式1: 指定参数登录.

复制代码
#参数含义: -U指定用户 -d要连接的数据库 -h要连接的主机 -W提示输入密码。
psql -U username -d database_name -h host -W
 
#use -- 使用linux当前用户登录连接到'pgtest'数据库
[postgres@VMTest root]$ psql -d pgtest
psql (15.5)
Type "help" for help.
 
pgtest=# 

方式2: 切换到postgres同名用户后登录

复制代码
# 当不指定参数时psql使用操作系统当前用户的用户名, 作为postgres的登录用户名和要连接的数据库名。
# 所以在PostgreSQL安装完成后可以通过以下方式登录, 此时连接的是postgres数据库, 且登录用户也是postgres。
[root@VMTest ~]# su postgres
[postgres@VMTest root]$ psql

10.2 创建用户

方式1: 在系统命令行中使用createuser命令中创建

复制代码
createuser username 

方式2: 在PostgresSQL命令行中使用CREATE ROLE指令创建

复制代码
CREATE ROLE rolename;

方式3: 在PostgresSQL命令行中使用CREATE USER指令创建

复制代码
CREATE USER username;

CREATE USER和CREATE ROLE的区别在于,CREATE USER指令创建的用户默认是有登录权限的,而CREATE ROLE没有。

复制代码
\du 指令显示用户和用户的用户属性

10.3 创建用户时设定用户属性

基本语法格式

复制代码
CREATE ROLE role_name WITH optional_permissions;

示例:在创建用户时设定登录权限。

复制代码
CREATE ROLE username WITH LOGIN;
\h CREATE ROLE #指令查看全部可设置的管理权限

10.4 修改用户属性

修改权限的命令格式

复制代码
ALTER ROLE username WITH attribute_options;

修改用户权限--示例

复制代码
# 赋予登录权限
ALTER ROLE david LOGIN
 
# 禁止登录
ALTER ROLE username WITH NOLOGIN
 
# 赋予创建角色的权限
postgres=# ALTER ROLE pg_test_user_4 WITH CREATEROLE
 
# 修改密码
postgres=# ALTER ROLE pg_test_user_4 WITH PASSWORD '654321';
 
# 设置角色的有效期
postgres=# ALTER ROLE pg_test_user_4 VALID UNTIL 'JUL 7 14:00:00 2012 +8'; 
 
#其它 root: role name
postgres=# ALTER ROLE root SUPERUSER;
postgres=# ALTER ROLE root Superuser;
postgres=# ALTER ROLE root Createrole;
postgres=# ALTER ROLE root CreateDB;
postgres=# ALTER ROLE root INHERIT;
postgres=# ALTER ROLE root CONNECTION;
deepcogni=# ALTER ROLE root BypassRLS;
 
postgres=# ALTER ROLE name RENAME TO newname;
 
ALTER ROLE name SET configuration_parameter { TO | = } { value | DEFAULT }  
ALTER ROLE name RESET configuration_parameter描述  
ALTER ROLE 修改一个数据库角色的属性。

ALTER ROLE语句简介:

复制代码
ALTER ROLE  
名称  
ALTER ROLE -- 修改一个数据库角色  
语法  
ALTER ROLE name [ [ WITH ] option [ ... ] ]  
  
这里的 option 可以是:  
      
      SUPERUSER | NOSUPERUSER  
    | CREATEDB | NOCREATEDB  
    | CREATEROLE | NOCREATEROLE  
    | CREATEUSER | NOCREATEUSER  
    | INHERIT | NOINHERIT  
    | LOGIN | NOLOGIN  
    | CONNECTION LIMIT connlimit  
    | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'  
    | VALID UNTIL 'timestamp'   
  
ALTER ROLE name RENAME TO newname  
  
ALTER ROLE name SET configuration_parameter { TO | = } { value | DEFAULT }  
ALTER ROLE name RESET configuration_parameter描述  
ALTER ROLE 修改一个数据库角色的属性。

10.5 设置访问权限

语法格式如下:

复制代码
GRANT permission_type ON table_name TO role_name;

实例:

复制代码
#赋予demo_role demo表的update权限
GRANT UPDATE ON table_name TO role_name; 
 
#赋予demo_role所有表的SELECT权限
GRANT SELECT ON ALL TABLES IN SCHEMA PUBLIC to demo_role; 

特殊符号:ALL代表所访问权限,PUBLIC代表所有用户

复制代码
# 赋给用户所有权限
GRANT ALL ON table_name TO role_name; 
 
# 将SELECT权限赋给所有用户, 大写的PUBLIC是一个特殊的关键字,代表了all users
GRANT SELECT ON table_name TO PUBLIC;

\z或\dp  指令显示用户访问权限。
\h GRANT 显示所有可设置的访问权限

10.6 撤销用户访问权限

语法格式如下:

复制代码
REVOKE permission_type ON table_name FROM user_name;
# 其中 permission_type 和 table_name 含义与 GRANT 指令中相同。

用户组

复制代码
在postgres中用户实际上是role,同时组也是role。 包含其他role的role就是组。

创建组示例:

复制代码
CREATE ROLE temporary_users;
GRANT temporary_users TO demo_role;
GRANT temporary_users TO test_user;

切换ROLE

复制代码
# 切换到role_name用户
SET ROLE role_name;
 
#切换回最初的role 
RESET ROLE; 

INHERIT权限:该属性使组成员拥有组的所有权限

复制代码
ALTER ROLE test_user INHERIT;

10.7 删除用户和组

复制代码
DROP ROLE role_name;
DROP ROLE IF EXISTS role_name;

11 附录

认证方式说明:

复制代码
1. trust
无条件地允许连接。这种方法允许任何可以与PostgreSQL数据库服务器连接的用户以他们期望的
任意PostgreSQL数据库用户身份登入,而不需要口令或者其他任何认证。
 
2. reject
 
无条件地拒绝连接。这有助于从一个组中"过滤出"特定主机,例如一个reject行可以阻塞一个
特定的主机连接,而后面一行允许一个特定网络中的其余主机进行连接。
 
3. md5
要求客户端提供一个双重 MD5 加密的口令进行认证。
 
4. password
要求客户端提供一个未加密的口令进行认证。
因为口令是以明文形式在网络上发送的,所以我们不应该在不可信的网络上使用这种方式。
 
5. gss
用 GSSAPI 认证用户。只对TCP/IP 连接可用。
 
6. sspi
用 SSPI 来认证用户。只在Windows 上可用。
 
7. ident
通过联系客户端的 ident 服务器获取客户端的操作系统名,并且检查它是否匹配被请求的数据库用户名。
Ident 认证只能在 TCIP/IP 连接上使用。当为本地连接指定这种认证方式时,将用 peer 认证来替代。
 
8. peer
从操作系统获得客户端的操作系统用户,并且检查它是否匹配被请求的数据库用户名。这只对本地连接可用。
 
9. ldap
使用LDAP服务器认证。
 
10. radius
用 RADIUS 服务器认证。
 
11. cert
使用 SSL 客户端证书认证。
 
12. pam
使用操作系统提供的可插入认证模块服务(PAM)认证。
 
13. bsd
使用由操作系统提供的 BSD 认证服务进行认证。
相关推荐
考虑考虑1 天前
postgressql更新时间
数据库·后端·postgresql
IvorySQL2 天前
PostgreSQL 从参数调优到 AI 诊断的实战指南
postgresql
许乌有3 天前
与Deepseek对话了解无线电通信知识
postgresql
吃掉你也没关系吧4 天前
【postgresql】一文详解postgresql中的统计模块
sql·postgresql
thulium_5 天前
使用 Docker 部署 PostgreSQL
docker·postgresql·容器
TLucas5 天前
在CentOS 7上将PostgreSQL数据库从默认路径迁移到自定义目录
linux·运维·postgresql·centos
0wioiw05 天前
PostgreSQL 免安装
数据库·postgresql
Derek_Smart6 天前
搞一个小轮子:基于Spring Boot与Vue的Web版SQL执行工具设计与实现
vue.js·spring boot·postgresql
吴声子夜歌7 天前
PostgreSQL——索引
数据库·postgresql·oracle
Jacob02347 天前
Python与PostgreSQL实战:打造实时地理空间数据处理与管理系统
javascript·python·postgresql