转载: centos7系统下postgresql11离线安装,卸载

附pg各版本下载链接https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/

版权声明:本文为CSDN博主「风情客家__」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/justlpf/article/details/84769813
文章特别好用,特别好,转作记录防止原文章链接失效 ^^,直接去原链接看方便

目录

  1. 创建postgres用户

  2. 下载并安装离线rpm包

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

2.2 需要下载的安装包有:

2.3 安装下载的离线rpm包

  1. 初始化数据库

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

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

5.1 移动目录

5.2 修改配置文件

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

  1. 修改密码

  2. 修改授权

7.1 设置远程连接

  1. 创建数据库

  2. 用户和权限管理

9.1 登录

9.2 创建用户

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

9.4 修改用户属性

9.5 设置访问权限

9.6 撤销用户访问权限

9.7 删除用户和组

  1. 常用的数据库命令

11 附录

  1. 创建postgres用户
    [root@VMTest postgresql11]# useradd -g postgres postgres
  2. 下载并安装离线rpm包
    在线安装参考:https://www.postgresql.org/download/linux/redhat/

2.1 从postgresql官网下载相应rpm离线安装包:
下载地址: https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/

2.2 需要下载的安装包有:
postgresql11-11.1-1PGDG.rhel7.x86_64.rpm
libicu-50.1.2-17.el7.x86_64.rpm (可能需要)
postgresql11-libs-11.1-1PGDG.rhel7.x86_64.rpm
postgresql11-server-11.1-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
2.3 安装下载的离线rpm包
将上述下载的rpm包上传到centos7上, 并使用rpm -ivh 进行安装:

[root@VMTest ~]# cd /home/lpf/soft/postgresql11/ #安装包存放路径
[root@VMTest ~]# rpm -ivh postgresql11-libs-11.1-1PGDG.rhel7.x86_64.rpm #安装lib库
[root@VMTest ~]# rpm -ivh postgresql11-11.1-1PGDG.rhel7.x86_64.rpm #安装客户端
[root@VMTest ~]# rpm -ivh postgresql11-server-11.1-1PGDG.rhel7.x86_64.rpm #安装服务端

#ps:如果要卸载的话, 先停止postges服务,然后执行下面的命令即可
[root@VMTest ~]# rpm -qe postgresql11-libs-11.1-1PGDG.rhel7.x86_64
[root@VMTest ~]# rpm -qe postgresql11-11.1-1PGDG.rhel7.x86_64
[root@VMTest ~]# rpm -qe postgresql11-server-11.1-1PGDG.rhel7.x86_64
3. 初始化数据库
[root@VMTest ~]# /usr/pgsql-11/bin/postgresql-11-setup initdb
Initializing database … OK
4. 设置开机启动,启动数据库
[root@VMTest ~]# systemctl enable postgresql-11 #设置开机启动
[root@VMTest ~]# systemctl start postgresql-11 #启动postgresql

#查看启动效果
方法一:
[root@VMTest ~]# ps -ef | grep postgre
postgres 35460 1 0 16:19 ? 00:00:00 /usr/pgsql-11/bin/postmaster -D /var/lib/pgsql/11/data/
postgres 35462 35460 0 16:19 ? 00:00:00 postgres: logger
postgres 35464 35460 0 16:19 ? 00:00:00 postgres: checkpointer
postgres 35465 35460 0 16:19 ? 00:00:00 postgres: background writer
postgres 35466 35460 0 16:19 ? 00:00:00 postgres: walwriter
postgres 35467 35460 0 16:19 ? 00:00:00 postgres: autovacuum launcher
postgres 35468 35460 0 16:19 ? 00:00:00 postgres: stats collector
postgres 35469 35460 0 16:19 ? 00:00:00 postgres: logical replication launcher
root 35474 35326 0 16:19 pts/0 00:00:00 grep --color=auto postgre

#方法二:
[root@VMTest ~]# systemctl status postgresql-11
● postgresql-11.service - PostgreSQL 11 database server
Loaded: loaded (/usr/lib/systemd/system/postgresql-11.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2018-12-03 16:19:40 CST; 2min 14s ago
Docs: https://www.postgresql.org/docs/11/static/
Process: 35454 ExecStartPre=/usr/pgsql-11/bin/postgresql-11-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
Main PID: 35460 (postmaster)
CGroup: /system.slice/postgresql-11.service
├─35460 /usr/pgsql-11/bin/postmaster -D /var/lib/pgsql/11/data/
├─35462 postgres: logger
├─35464 postgres: checkpointer
├─35465 postgres: background writer
├─35466 postgres: walwriter
├─35467 postgres: autovacuum launcher
├─35468 postgres: stats collector
└─35469 postgres: logical replication launcher

Dec 03 16:19:40 VMTest systemd[1]: Starting PostgreSQL 11 database server…
Dec 03 16:19:40 VMTest postmaster[35460]: 2018-12-03 16:19:40.843 CST [35460] LOG: listening on IPv4 address “127.0.0.1”, port 5432
Dec 03 16:19:40 VMTest postmaster[35460]: 2018-12-03 16:19:40.843 CST [35460] LOG: could not bind IPv6 address “::1”: Cannot assign…address
Dec 03 16:19:40 VMTest postmaster[35460]: 2018-12-03 16:19:40.843 CST [35460] HINT: Is another postmaster already running on port 5… retry.
Dec 03 16:19:40 VMTest postmaster[35460]: 2018-12-03 16:19:40.845 CST [35460] LOG: listening on Unix socket “/var/run/postgresql/.s…L.5432”
Dec 03 16:19:40 VMTest postmaster[35460]: 2018-12-03 16:19:40.848 CST [35460] LOG: listening on Unix socket “/tmp/.s.PGSQL.5432”
Dec 03 16:19:40 VMTest postmaster[35460]: 2018-12-03 16:19:40.858 CST [35460] LOG: redirecting log output to logging collector process
Dec 03 16:19:40 VMTest postmaster[35460]: 2018-12-03 16:19:40.858 CST [35460] HINT: Future log output will appear in directory “log”.
Dec 03 16:19:40 VMTest systemd[1]: Started PostgreSQL 11 database server.
Hint: Some lines were ellipsized, use -l to show in full.
5. 移动数据库到指定目录
5.1 移动目录
[root@VMTest ~]# mv /var/lib/pgsql/11/* /data/pgsql/
[root@VMTest ~]# chown -R postgres:postgres /data/pgsql/
5.2 修改配置文件
#a.修改指定的数据目录
[root@VMTest ~]# vi /usr/lib/systemd/system/postgresql-11.service
#修改Environment=PGDATA=/var/lib/pgsql/11/data/为
Environment=PGDATA=/data/pgsql/data/

#b.修改数据目录
[root@VMTest ~]# vi /data/pgsql/data/postgresql.conf
#修改data_directory:
data_directory = ‘/data/pgsql/data’
5.3 重新加载配置文件,重启数据库
[root@VMTest ~]# systemctl daemon-reload
[root@VMTest ~]# systemctl restart postgresql-11
[root@VMTest ~]# ps -ef | grep postgres #确认启动成功
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’;
7. 修改授权
7.1 设置远程连接
#修改1, ps:认证方式解释见附录
[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 /data/pgsql/data/postgresql.conf
#修改listen_addresses
listen_addresses = ‘*’
#有需求修改port
#port = 5432

#重启数据库
[root@VMTest ~]# systemctl restart postgresql-11
8. 创建数据库

创建数据库

postgres=# create database databasename;

查看数据库列表

postgres=# \l

进入数据库

postgres=# \c databasename;

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

postgres=# \d

创建模式schema

deepcogni=# create schema test1;

  1. 常用的数据库命令
    [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 [表名];
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 (11.1)
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行可以阻塞一个
特定的主机连接,而后面一行允许一个特定网络中的其余主机进行连接。

  1. md5
    要求客户端提供一个双重 MD5 加密的口令进行认证。

  2. password
    要求客户端提供一个未加密的口令进行认证。
    因为口令是以明文形式在网络上发送的,所以我们不应该在不可信的网络上使用这种方式。

  3. gss
    用 GSSAPI 认证用户。只对TCP/IP 连接可用。

  4. sspi
    用 SSPI 来认证用户。只在Windows 上可用。

  5. ident
    通过联系客户端的 ident 服务器获取客户端的操作系统名,并且检查它是否匹配被请求的数据库用户名。
    Ident 认证只能在 TCIP/IP 连接上使用。当为本地连接指定这种认证方式时,将用 peer 认证来替代。

  6. peer
    从操作系统获得客户端的操作系统用户,并且检查它是否匹配被请求的数据库用户名。这只对本地连接可用。

  7. ldap
    使用LDAP服务器认证。

  8. radius
    用 RADIUS 服务器认证。

  9. cert
    使用 SSL 客户端证书认证。

  10. pam
    使用操作系统提供的可插入认证模块服务(PAM)认证。

  11. bsd
    使用由操作系统提供的 BSD 认证服务进行认证。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值