查看psql的命令:psql --help
连接选项说明:
For more information, type “?” (for internal commands) or “\help” (for SQL
commands) from within psql, or consult the psql section in the PostgreSQL
documentation.
通过以上说明,我们还可以在进入psql后,查看一些命令:
\?:查看服务级别的命令
\help:查看数据库级别的命令
登录:psql -h 主机名 -p 端口 -U 用户名 -W
查看全部用户信息:\du
常用命令如下:
CREATE USER name [ [ WITH ] option [ ... ] ]
CREATE ROLE name [ [ WITH ] option [ ... ] ]
CREATE USER和CREATE ROLE等效,除了CREATE USER默认有连接权限,而CREATE ROLE没有,只有具有LOGIN属性的角色才能被用于一个数据库连接的初始角色名称。要创建一个带有登录权限的角色,也可以使用CREATE ROLE 名称 LOGIN;
option可以是:
SUPERUSER | NOSUPERUSER
CREATEDB | NOCREATEDB
CREATEROLE | NOCREATEROLE
INHERIT | NOINHERIT
LOGIN | NOLOGIN
REPLICATION | NOREPLICATION
BYPASSRLS | NOBYPASSRLS
CONNECTION LIMIT connlimit
[ ENCRYPTED ] PASSWORD ‘password’ | PASSWORD NULL
VALID UNTIL ‘timestamp’
IN ROLE role_name [, …]
IN GROUP role_name [, …]
ROLE role_name [, …]
ADMIN role_name [, …]
USER role_name [, …]
SYSID uid
具体可以查看官方中文文档
构建一个超级管理员用户root,密码为root:create user root with SUPERUSER PASSWORD 'root'
退出psql命令行:\q
重新登录:psql -h 192.169.56.100 -p 5432 -U root -W
出现错误,数据库不存在:database “root” does not exist,新增一个数据库:create database root
;
测试下,切换数据库:\c root
重新登录,正常了
语法:ALTER ROLE role_specification [ WITH ] option [ ... ]
具体语法可以查看官方中文文档
修改用户名,从root改为root1:ALTER ROLE root RENAME TO root1;
语法:DROP ROLE [ IF EXISTS ] name [, ...]
IF EXISTS
如果该角色不存在则不要抛出一个错误,而是发出一个提示。
name
要移除的角色的名称。
删除root1角色:DROP ROLE root1;
PostgreSQL的逻辑结构如下图:
可以看到PostgreSQL一个数据库(Database)中有多个模式(Schema),在每个schema下都有自己的库表信息,权限粒度会比MySQL更细一些。
参数说明:
在PostgreSQL中,权限的管理分为很多层:
#构建用户
create user forlan with password 'forlan';
#构建数据库
create database forlan;
#切换数据库
\c forlan;
#构建schema
create schema forlanSchema;
#将这个schema的拥有者改为forlan用户
alter schema forlanSchema owner to forlan;
#将forlan库下的forlan的schema中的表的增,改,查权限赋予给forlan用户
grant select,insert,update on all tables in schema forlanSchema to forlan;
验证是否配置成功,使用forlan用户连接forlan数据库,出现异常,如下:
forlan=# \c forlan -forlan
FATAL: Peer authentication failed for user "-forlan"
Previous connection kept
原因是因为我们的pg_hba.conf如下,当前系统用户只有postgres,没有forlan,无法使用peer连接
可以使用远程连接,使用host这种,并展示当前数据库中的所有模式(schemas)的列表:\dn
,如下:
数据库默认有一个public的schema,归属postgres