postgres复制数据库_pg_database查询不到(1),2024软件测试大厂面试知识分享

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
img

正文

#创建授权的用户
postgres=# create user test01_user with password ‘Test01@123’;

postgres=# create database test01 owner test01_user;

#授权数据库
postgres=#grant all privileges on database test01 to test01_user;
postgres=#grant select,insert,update on database test01 to test01_user;

#授权表
/* 赋给用户表的所有权限 */
GRANT ALL ON tablename TO user;
/* 撤销用户权限 */
REVOKE privileges ON tablename FROM user;

或者
给用户 “runoob” 分配权限:

GRANT ALL ON COMPANY TO runoob;

GRANT
信息 GRANT 表示所有权限已经分配给了 “runoob”。

runoobdb=# REVOKE ALL ON COMPANY FROM runoob;
REVOKE
信息 REVOKE 表示已经将用户的权限撤销。

删除用户:
runoobdb=# DROP USER runoob;
DROP ROLE
信息 DROP ROLE 表示用户 “runoob” 已经从数据库中删除。

在这里插入图片描述
在这里插入图片描述

授权

postgres@shhkfys$for i in cat c ;do psql ga_zj_taizhou -c “grant all on $i to gazjtaizhou;” ;done

postgres@shhkfys:~$psql ga_zj_taizhou #进入ga_zj_taizhou数据库,查看数据库的所属者是不是gazjtaizhou,以及所有授权

postgres@shhkfys:~$ for i in cat c ;do psql ga_zj_taizhou -c "alter table KaTeX parse error: Expected 'EOF', got '#' at position 49: … #̲更改ga_zj_taizhou…psql ga_zj_taizhou #查看ga_zj_taizhou数据库表的所属主。

在这里插入图片描述

测试连接

psql -h 192.168.1.106 -p 5432 -U test01_user

psql -h 192.168.1.106 -p 5432 -U test01_user -d test01

在这里插入图片描述

psql -h 192.168.1.106 -p 5432 -U test02_user -d test02

在这里插入图片描述

psql -h 192.168.1.106 -p 5432 -U postgres -d test01

psql -h 192.168.1.106 -p 5432 -U postgres -d test02

在这里插入图片描述
可以看出,postgres用某个用户登录,默认登录同名数据库,如果用户名和数据库不同,需要特别指定,否则会报找不到库!

备份所有的数据库

PostgreSQL备份
如果原系统中有PostgreSQL数据库,需要备份数据库。

chroot /mnt
su - postgres
pg_dumpall >database-20180201.sql

postgres@shhkfys:~$sudo pg_dump xc_gj_rainbow > ga-zj-taizhou.2020330.sql #将ga-zj-taizhou.2020330.sql导入到xc_gj_rainbow数据库中

扩展

MySQL创建用户并授权db权限

mysql> create database mydb;
mysql> create user a_user identified by ‘ThePassword’
-> ;
Query OK, 0 rows affected (0.04 sec)

mysql> grant all privileges on mydb.* to a_user@‘%’;
Query OK, 0 rows affected (0.02 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

Postgres创建用户并授权db权限
对于Postgres9.0以上

创建一个用户etl_user,允许登陆,永不过期

create role etl_user login password ‘ThePassowrd’ valid until ‘infinity’;

将db权限授予user

grant all privileges on database mydb to etl_user ;

或者,分别授权

GRANT CONNECT ON DATABASE mydb TO etl_user;
GRANT USAGE ON SCHEMA public TO etl_user;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO etl_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO etl_user;

这时候,如果你要删除这个role,则必须先要删除关联的privileges

REVOKE CONNECT ON DATABASE mydb FROM etl_user;
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM etl_user;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM etl_user;
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM etl_user;
DROP USER etl_user;

逻辑备份恢复主要以下三种:

pg_dump

pg_dumpall

copy

https://blog.csdn.net/pg_hgdb/article/details/79168060?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.nonecase

常见报错

1、新建数据库失败。

在这里插入图片描述
解决办法 :
数据库里面不识别-符号
下面是正确写法

#pg_dump xc_gj_rainbow |psql ga_zj_taizhou

2、授权之后,链接数据库失败

执行命令

postgres=# grant all privileges on database ga_zj_taizhou to gazjtaizhou;

报错信息 : ERROR : permission denied for relation permission
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解决办法 :
进入需要授权的数据库里面

postgres=# \c ga_zj_taizhou #进入数据库里面
You are now connected to database “ga_zj_taizhou” as user “postgres”.

#更改该数据库的属主
ga_zj_taizhou=# alter database ga_zj_taizhou owner to gazjtaizhou;
ALTER DATABASE

#将该数据库里面的所有表都授权给该用户
ga_zj_taizhou=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO gazjtaizhou;
GRANT

#在该数据库里面,再次将该数据库的权限授权给该用户
ga_zj_taizhou=# grant all privileges on database ga_zj_taizhou to gazjtaizhou;
GRANT
ga_zj_taizhou=# flush; #刷新

3、序列没有授权

报错信息 :
在这里插入图片描述
解决办法:
对序列单独授权
对postgres数据库里面的序列全部授权

4、删除数据库报错

报错信息 :

postgres=# drop database ga_zj_taizhou;
ERROR: database “ga_zj_taizhou” is being accessed by other users
DETAIL: There is 1 other session using the database.

在这里插入图片描述
这个意思是说,删除数据库失败,因为这里还有3个链接连接到该数据库上,PostgreSQL在有进程连接到数据库时,对应的数据库是不运行被删除的。

那么怎么办呢?
解决方式:断开连接到这个数据库上的所有链接,再删除数据库。怎么断开呢?在PostgreSQL 9.2 及以上版本,执行下
面的语句:
解决办法 :

SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE datname=‘testdb’ AND pid<>pg_backend_pid();

执行上面的语句之后,在执行DROP操作,就可以删除数据库了。

上面语句说明:
pg_terminate_backend:用来终止与数据库的连接的进程id的函数。
pg_stat_activity:是一个系统表,用于存储服务进程的属性和状态。
pg_backend_pid():是一个系统函数,获取附加到当前会话的服务器进程的ID

SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE datname=‘ga_zj_taizhou’ AND pid<>pg_backend_pid();

在这里插入图片描述
删除成功
在这里插入图片描述

5、导入数据库数据失败

数据库存在,报错数据库不存在。

postgres@shhkfys:~$ pg_dump xc-gj-wxb > xc-gj-wxb.sql
pg_dump: [archiver (db)] connection to database “xc-gj-wxb” failed: FATAL: database “xc-gj-wxb” does not exist
postgres@shhkfys:~$ psql -h localhost -p 3500 -U xcgjwxb
Password for user xcgjwxb:
psql.bin: FATAL: database “xcgjwxb” does not exist

在这里插入图片描述
psql进入数据库,使用\l+命令查看数据库,发现数据库存在,
在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

psql进入数据库,使用\l+命令查看数据库,发现数据库存在,
在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-IskF5K1R-1713344048484)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值