【openGauss实战8】Schema的图文解读

news/2025/2/9 3:55:10/

📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前服务于工业互联网
擅长主流Oracle、MySQL、PG、高斯及GP 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

文章目录

  • 前言
    • 📣 1.何为Schema
    • 📣 2.Schema语法
      • ✨ 2.1 创建SCHEMA
      • ✨ 2.2 修改SCHEMA
      • ✨ 2.3 删除SCHEMA
    • 📣 3.Schema赋权

前言

本篇介绍了openGauss的SCHEMA的原理及管理

📣 1.何为Schema

Schema又称作模式。通过管理Schema,允许多个用户使用同一数据库而不相互干扰,可以将数据库对象组织成易于管理的逻辑组,同时便于将第三方应用添加到相应的Schema下而不引起冲突。

📢📢📢 数据库(database)、用户(user)、schema、和表的关系如下图所示:

在这里插入图片描述

每个数据库包含一个或多个Schema。数据库中的每个Schema包含表和其他类型的对象。数据库创建初始,默认具有一个名为public的Schema,且所有用户都拥有此Schema的usage权限,只有系统管理员和初始化用户可以在public Schema下创建函数、存储过程和同义词对象,其他用户即使赋予create权限后也不可以创建上述三种对象。可以通过Schema分组数据库对象。Schema类似于操作系统目录,但Schema不能嵌套。

📢📢📢注意要点

相同的数据库对象名称可以应用在同一数据库的不同Schema中
CREATE USER创建用户的同时,系统会在执行该命令的数据库中,为该用户创建一个同名的SCHEMA
可以把schema理解成操作系统的目录(文件夹),所不同的是schema只有一层,不能嵌套创建

📣 2.Schema语法

✨ 2.1 创建SCHEMA

语法:CREATE SCHEMA schema_name [ AUTHORIZATION user_name ] ;

案例1:创建一个名为tpcds的模式openGauss=#  create schema tpcds;
openGauss=# \dn+ tpcdsList of schemasName  | Owner | Access privileges | Description | WithBlockChain 
-------+-------+-------------------+-------------+----------------tpcds | omm   |                   |             | f

在这里插入图片描述

✨ 2.2 修改SCHEMA

修改模式的名称语法:ALTER SCHEMA schema_name RENAME TO new_name;
修改模式的所有者语法:ALTER SCHEMA schema_name OWNER TO new_owner;

案例1:重命名tpcds为tpcds1
openGauss=# ALTER SCHEMA tpcds RENAME TO tpcds1;
ALTER SCHEMA
openGauss=# \dn+ tpcds1    List of schemasName  | Owner | Access privileges | Description | WithBlockChain 
--------+-------+-------------------+-------------+----------------tpcds1 | omm   |                   |             | f案例2:创建一个用户jeames, 并将tpcds1的owner修改为jeames
openGauss=# CREATE USER jeames PASSWORD 'abcd@123';
CREATE ROLE
openGauss=# \dnList of schemasName       | Owner  
-----------------+--------blockchain      | ommcstore          | ommdb4ai           | ommdbe_perf        | ommdbe_pldebugger  | ommdbe_pldeveloper | ommjeames          | jeamesmesdb           | mesdbpkg_service     | ommpublic          | ommsnapshot        | ommsqladvisor      | ommtpcds1          | omm
(13 rows)openGauss=# ALTER SCHEMA tpcds1 OWNER TO jeames;
ALTER SCHEMA
openGauss=# \dn+ tpcds1List of schemasName  | Owner  | Access privileges | Description | WithBlockChain 
--------+--------+-------------------+-------------+----------------tpcds1 | jeames |                   |             | f

在这里插入图片描述

案例3:在模式tpcds1中建表customer、插入记录和查询记录
openGauss=# create table tpcds1.customer(id int, name char(30));
CREATE TABLE
openGauss=# insert into tpcds1.customer values(1 ,'xxxx');
INSERT 0 1
openGauss=# select * from tpcds1.customer;id |              name              
----+--------------------------------1 | xxxx                          

✨ 2.3 删除SCHEMA

语法:DROP SCHEMA schema_name;
注:不要随意删除pg_temp或pg_toast_temp开头的模式,这些模式是系统内部使用的

案例1:删除模式tpcds1
DROP SCHEMA tpcds1 CASCADE;

在这里插入图片描述

📢📢📢 补充

要查看属于某Schema下的表列表,请查询系统视图PG_TABLES:
openGauss=# SELECT distinct(tablename),schemaname from pg_tables where schemaname = ‘pg_catalog’;

在这里插入图片描述

📣 3.Schema赋权

普通schema的create权限grant给其他用户后,其他用户即可以创建对象。

分别创建schema teacher_zhao2、teacher_zhao3(指定AUTHORIZATION),并把create权限赋给teacher_li:openGauss=# create SCHEMA teacher_zhao2;
CREATE SCHEMA
openGauss=# \dn+ teacher_zhao2List of schemasName      | Owner | Access privileges | Description | WithBlockChain 
---------------+-------+-------------------+-------------+----------------teacher_zhao2 | omm   |                   |             | fopenGauss=# CREATE SCHEMA teacher_zhao3 AUTHORIZATION jeames;
CREATE SCHEMA
openGauss=# \dn+ teacher_zhao3List of schemasName      | Owner  | Access privileges | Description | WithBlockChain 
---------------+--------+-------------------+-------------+----------------teacher_zhao3 | jeames |                   |             | f可以发现没有指定AUTHORIZATION的情况下,默认创建用户是clouduser(系统管理员),
而指定情况下,则创建用户就是指定的用户。

下面尝试用jeames登录,创建数据库对象teacher_zhao2.t2:

openGauss=# grant create on SCHEMA teacher_zhao2 to jeames;
openGauss=# grant all on all tables in schema teacher_zhao2 to jeames;
openGauss=# grant select on teacher_zhao2.t2 to jeames;openGauss=> create table teacher_zhao2.t2(a int);
openGauss=# \c postgres jeames
openGauss=> create table teacher_zhao2.t2(a int);

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


http://www.ppmy.cn/news/24207.html

相关文章

【RabbitMQ五】——RabbitMQ路由模式(Routing)

RabbitMQ路由模式前言RabbitMQ模式的基本概念为什么要使用Rabbitmq 路由模式RabbitMQ路由模式组成元素路由模式完整代码Pom文件引入RabbtiMQ依赖RabbitMQ工具类生产者消费者1消费者2运行结果截图前言 通过本篇博客能够简单使用RabbitMQ的路由模式。 本篇博客主要是博主通过官网…

【JavaScript】35_包装类与垃圾回收机制

10、包装类 在JS中,除了直接创建原始值外,也可以创建原始值的对象 通过 new String() 可以创建String类型的对象 通过 new Number() 可以创建Number类型的对象 通过 new Boolean() 可以创建Boolean类型的对象 但是千万不要这么做 包装类&#xff1…

box86 exagear

box86 box86编译的时候是静态编译,所以编译好后一个可执行没任何依赖直接拷贝走就能运行,注意,box86需要32位的arm库(armhf),麒麟系统有打包好的armhf库的包,可以直接用,缺的再单补。box86做指令…

用 Python 调用 GPT-3 API

用 Python 调用 GPT-3 API GPT-3 是去年由 Open AI 推出的语言机器学习模型。它因其能够写作、写歌、写诗,甚至写代码而获得了广泛的媒体关注!该工具免费使用,只需要注册一个电子邮件即可。 GPT-3 是一种叫 transformer 的机器学习模型。具体…

前端对于深拷贝和浅拷贝的应用和思考

浅拷贝 浅拷贝 : 浅拷贝是指对基本类型的值拷贝,以及对对象类型的地址拷贝。它是将数据中所有的数据引用下来,依旧指向同一个存放地址,拷贝之后的数据修改之后,也会影响到原数据的中的对象数据。最简单直接的浅拷贝就…

C语言---字符串函数总结

🚀write in front🚀 📝个人主页:认真写博客的夏目浅石. 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:夏目的C语言宝藏 💬总结:希望你看完之…

分布式架构下,Session共享有什么方案?

分布式架构下,Session共享有什么方案? 1.不要有Session:但是确实在某些场景下,是可以没有session的,其实在很多借口类系统当中,都提倡【API无状态服务】; 也就是每一次的接口访问,都…

Python+Go实践(电商架构三)

文章目录服务发现集成consul负载均衡负载均衡算法实现配置中心nacos服务发现 我们之前的架构是通过ipport来调用的python的API,这样做的弊端是 如果新加一个服务,就要到某个服务改web(go)层的调用代码,配置IP/Port并发…