PostgreSQL常用命令-创建数据库、用户、多模式schema、修改用户密码、访问其他模式或在其他模式建表的权限、切换用户、无法删除数据库、导入导出sql、活用set search_path、建表

序言

下面都以 test 数据库,my_schema 模式名为例,主用户是 postgres ,新建用户是 admin

测试环境:

Windows 10

1、创建 PostgreSQL 的数据库命令

tips: 使用双引号区分英文大小写名字,单引号隔开SQL命令和内容,SQL 命令英文大小写都可以

小写 t

create database test owner postgres;

大写 T

create database "Test" owner postgres;

test 和 Test 这两个是不同的数据库

owner 参数可以指定拥有者(所有者),但如果不指定 owner ,那么就会默认当前用户

查看数据库命令:(注意是英文小写的 l

\l

postgres=# \l
                                                        数据库列表
   名称    |  拥有者  | 字元编码 |            校对规则            |             Ctype              |       存取权限     
-----------+----------+----------+--------------------------------+--------------------------------+-----------------------
 Test      | postgres | UTF8     | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 |

2、创建用户命令

小写

create user admin with password 'mypassword';

大写

create user "Admin" with password 'mypassword';

查看用户命令:

\du

postgres=# \du
                             角色列表
 角色名称 |                    属性                    | 成员属于
----------+--------------------------------------------+----------
 Admin    |                                            | {}
 admin    |                                            | {}
 postgres | 超级用户, 建立角色, 建立 DB, 复制, 绕过RLS | {}

3、修改用户密码

alter user admin with password 'mypassword';

4、 创建多模式

create schema my_schema;

查看当前的多模式现状命令:

简略信息

\dn

postgres=# \dn
   架构模式列表
  名称  |  拥有者
--------+----------
 admin  | postgres
 public | postgres
(2 行记录)

详细信息的加 + 号

\dn+

postgres=# \dn+
                           架构模式列表
  名称  |  拥有者  |       存取权限       |          描述
--------+----------+----------------------+------------------------
 admin  | postgres | postgres=UC/postgres+|
        |          | admin=U/postgres     |
 public | postgres | postgres=UC/postgres+| standard public schema
        |          | =UC/postgres         |
(2 行记录)

5、修改多模式的拥有者

ALTER SCHEMA my_schema OWNER TO postgres;

6、分配用户访问其他模式的权限或在其他模式建表的权限

比如模式拥有者是 postgres 那么需要分配给其他用户用于访问用户 postgresmy_schema 模式内的表,例如用户 admin

# 重点输入如下命令,修改用户admin权限可以访问 schema 模式 admin
# 1
grant all privileges on database "test" to admin;
# 2
# 在 my_schema 模式内拥有访问修改权限 U
grant usage on schema my_schema to admin;
# 在 my_schema 模式内拥有创建表权限 C
grant create  on schema my_schema to admin;
# 3
grant all privileges on all tables in schema my_schema to admin;
 

一般来说,只需要配置上面四个个命令,就可以让某个用户拥有访问和某个数据库内的其他模式的权限,以及在其他模式内创建表的权限,比如上面的例子意义是,首先,用户 admin 第一步需要拥有访问数据库 test 的权限,才能进入数据库 test 内部的模式进行访问,然后在赋予用户 admin 拥有访问数据库内 my_schema 模式的权限,进入数据库 test 内部存在的 my_schema 模式后,还要赋予用户 admin 拥有访问 my_schema 模式内部的表。

赋予在某模式下拥有可以修改表和创建表的权限效果演示:

在这里插入图片描述

6.1 撤销权限命令

revoke all privileges on schema my_schema from public

这里的 public 代指所有的用户(public代表了all users),指的是所有用户都无法访问 my_schema 模式或在 my_schema 模式内创建数据库对象(比如建表或修改表访问表等操作)

也可以修改为特定的用户名:(如 admin 用户)

revoke all privileges on schema my_schema from admin

撤销了特定用户的的权限效果演示:

在这里插入图片描述

多用户多模式权限分配步骤

  1. 用户 admin 第一步需要拥有访问数据库 test 的权限(当然这里是包含了在这个数据库内拥有创建、更新‘’删除表等等的权限,访问权限只是其中之一);
  2. 赋予用户 admin 拥有访问数据库内 my_schema 模式的权限;
  3. 赋予用户 admin 拥有访问 my_schema 模式内部的表。

在 PostgreSQL 中也是一样。您需要模式 usage 权限和对象权限才能对对象执行操作,例如表中的 SELECT。类似查询语句的权限,比如 Linux 系统访问目录是需要 rwx 中的 x 权限,usage 差不多就是 x 权限的意思。

下面的命令笔者感觉不需要,感觉有点重复,如果今后需要用到如下的三条命令,再说。笔者会再次补充。

# 上面3个是重点。
grant all privileges on all sequences in schema my_schema to admin;
 
grant select,insert,update,delete on all tables in schema my_schema to admin;
 
grant all on schema my_schema to admin;

权限理解触发截图:

在这里插入图片描述

7、切换数据库并切换用户

如下命令,意义是,切换当前数据库,相当于 MySQL 数据库的 use "Test" 切换数据库命令,然后后面可以跟着用户名,相当于是切换当前用户,从 postgres 用户切换为用户 admin

\c "Test" admin

先查看当前用户:select current_user;

postgres=# select current_user;
 current_user
--------------
 postgres
(1 行记录)
postgres=# \c "Test" admin;
用户 admin 的口令:
您现在已经连接到数据库 "Test",用户 "admin".
Test=> select current_user;
 current_user
--------------
 admin
(1 行记录)

8、删除数据库和删除用户

删除数据库

drop databse test;

删除用户

drop use admin;

8.1、删除数据库时,报错无法删除数据库的问题,会话存在

Postgresql删除数据库失败解决方法

“ERROR: database "dbname" is being accessed by other users
DETAIL: There are 2 other sessions using the database.

需断开数据库所有连接执行

输入如下命令,断开 test 数据库的所有连接,注意 datname ='删除的数据库名'

SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE datname='test' AND pid<>pg_backend_pid();

如果还是无法删除数据库,请看如下链接:

关于 PostgreSQL 删除数据库 - 命令行删除,报错数据库不存在,pgadmin 报错存在会话链接 导致无法删除数据库问题

9、导入/导出 sql 文件命令

9.1 导入sql 文件命令

psql -h 127.0.0.1 -p 5432 -U postgres -d test -f initData.sql

-h 主机ip

-p 主机 postgresql 数据库监听的端口号

-U 主机 postgresql 数据库的验证用户

-d 指定访问的数据库名

-f 要导入的sql 文件绝对路径相对路径,看当前位置。

9.2 导出 sql 文件命令

pg_dump -U postgres -c test -f /home/test.sql

10、活用 set search_path

如果要在 postgresql 数据库中使用这个 set search_path 命令,需求是为了查看当前数据库内其他模式内的表。那么首先就得知道 \d\d+ (查看表命令)

可以查看当前的 search_path 的内容

postgres=# show search_path;
   search_path
-----------------
 "$user", public
(1 行记录)

第一个值指定一个与当前用户同名的schema被搜索。如果不存在这样的schema,该条目将被忽略。第二个元素指的是我们已经看到的public schema。

search_path中存在的第一个schema是创建新对象的默认位置。这就是默认情况下,对象是在public schema中创建的原因。当对象在没有schema限定的情况下被引用时(表修改、数据修改或查询命令),search_path被遍历,直到找到一个匹配的对象。因此,在默认配置中,任何未经限定的访问又只能引用public schema。

设置参数
为了把我们的新schema放在路径中,我们使用:

SET search_path TO myschema,public;

我们在这里省略了$user,因为我们没有立即需要它,然后我们可以在没有schema限定的情况下访问该表。

DROP TABLE mytable

另外,由于myschema是路径中的第一个元素,新的对象将默认在其中创建。

我们也可以这样写。

SET search_path TO myschema

然后我们就不再能够在没有明确限定的情况下访问public schema了。除了默认存在之外,public schema并没有什么特别之处。它也可以被放弃。

参数理解:

"$user" :这是指名称为当前用户的模式。

'public': 这是指所有用户都可以访问的默认模式。

总结

总之,就是说假如除了默认的模式 public ,还存在一个新的模式,叫做 my_schema,那么按照原来的命令 \d 或 \d+ 命令,是无法查询其他模式下的表的,所以需要配置 set search_path 将查询指向另外的一个新模式,上面的说法,有些繁琐,直接上例子。

演示:

databasetest
schemapublicmy_schema

默认情况:

postgres=# show search_path;
   search_path
-----------------
 "$user", public
(1 行记录)

修改后情况:set search_path to my_schema,public;

postgres=# set search_path to my_schema,public;
SET
postgres=# show search_path;
  search_path
---------------
 my_schema, public
(1 行记录)

然后就可以使用命令 \d\d+ 查询到新模式 my_schemapublic 模式内的表情况了

11、创建表(or 其他模式的表)

11.1 模式的使用与创建模式内的表:

创建表时在表明前面添加模式名,若不指定模式名,默认使用search_path第一个模式创建数据表,命令:
create table 模式名.表名 (列名 数据类型);

eg:创建两个数据表,testtable1使用默认模式名创建,testtable2 指定模式名创建

  1. 默认是 public 模式,所以是在 public 模式内,创建表 testtable1
  2. 如果是指定模式,自然就不是在 public 模式下创建表 testtable2

11.2 模式的更改:

a)重命名:alter schema 旧名字 to 新名字;
b)修改模式的归属用户:alter schema 模式名 to 新用户;
模式的删除:drop schema 模式名;


参考链接

1. 在PostgreSQL中使用SET search_path有什么用?

2. PostgreSQL_通过schema控制用户权限

3. postgres中schema访问权限设置

4. postgres 基于Schema 权限访问探讨

5. postgresql数据库中多个Schemas互相访问

6. Postgres : 创建schema、创建表空间与指定用户权限

7. 为什么POSTGRESQL的\ DT只显示公共模式表?

8. 第三节——模式

9. PostgreSQL中search_path参数解密

10. 关于数据库:SCHANT上的GRANT USAGE到底能做什么?

11. linux查看文件权限命令 查看文件权限 linux

12. PostgreSQL-表空间、数据库、模式、角色实践

13. postgreSQL数据库基本操作和导入导出数据-命令行

14. PostgreSQL如何导出数据库文件

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值