附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
文章特别好用,特别好,转作记录防止原文章链接失效 ^^,直接去原链接看方便
目录
-
创建postgres用户
-
下载并安装离线rpm包
2.1 从postgresql官网下载相应rpm离线安装包:
2.2 需要下载的安装包有:
2.3 安装下载的离线rpm包
-
初始化数据库
-
设置开机启动,启动数据库
-
移动数据库到指定目录
5.1 移动目录
5.2 修改配置文件
5.3 重新加载配置文件,重启数据库
-
修改密码
-
修改授权
7.1 设置远程连接
-
创建数据库
-
用户和权限管理
9.1 登录
9.2 创建用户
9.3 创建用户时设定用户属性
9.4 修改用户属性
9.5 设置访问权限
9.6 撤销用户访问权限
9.7 删除用户和组
- 常用的数据库命令
11 附录
- 创建postgres用户
[root@VMTest postgresql11]# useradd -g postgres postgres - 下载并安装离线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;
- 常用的数据库命令
[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 附录
认证方式说明:
-
trust
无条件地允许连接。这种方法允许任何可以与PostgreSQL数据库服务器连接的用户以他们期望的
任意PostgreSQL数据库用户身份登入,而不需要口令或者其他任何认证。 -
reject
无条件地拒绝连接。这有助于从一个组中"过滤出"特定主机,例如一个reject行可以阻塞一个
特定的主机连接,而后面一行允许一个特定网络中的其余主机进行连接。
-
md5
要求客户端提供一个双重 MD5 加密的口令进行认证。 -
password
要求客户端提供一个未加密的口令进行认证。
因为口令是以明文形式在网络上发送的,所以我们不应该在不可信的网络上使用这种方式。 -
gss
用 GSSAPI 认证用户。只对TCP/IP 连接可用。 -
sspi
用 SSPI 来认证用户。只在Windows 上可用。 -
ident
通过联系客户端的 ident 服务器获取客户端的操作系统名,并且检查它是否匹配被请求的数据库用户名。
Ident 认证只能在 TCIP/IP 连接上使用。当为本地连接指定这种认证方式时,将用 peer 认证来替代。 -
peer
从操作系统获得客户端的操作系统用户,并且检查它是否匹配被请求的数据库用户名。这只对本地连接可用。 -
ldap
使用LDAP服务器认证。 -
radius
用 RADIUS 服务器认证。 -
cert
使用 SSL 客户端证书认证。 -
pam
使用操作系统提供的可插入认证模块服务(PAM)认证。 -
bsd
使用由操作系统提供的 BSD 认证服务进行认证。