openGauss的SCHEMA的原理及管理介绍

 更新时间:2023年02月13日 16:09:47   作者:IT邦德  
这篇文章主要为大家介绍了openGauss的SCHEMA的原理及管理分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

📣 1.何为Schema摘要:

本篇介绍了openGauss的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+ tpcds
                         List of schemas
 Name  | 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 schemas
  Name  | Owner | Access privileges | Description | WithBlockChain 
--------+-------+-------------------+-------------+----------------
 tpcds1 | omm   |                   |             | f

案例2:创建一个用户jeames, 并将tpcds1的owner修改为jeames

openGauss=# CREATE USER jeames PASSWORD 'abcd@123';
CREATE ROLE
openGauss=# \dn
     List of schemas
      Name       | Owner  
-----------------+--------
 blockchain      | omm
 cstore          | omm
 db4ai           | omm
 dbe_perf        | omm
 dbe_pldebugger  | omm
 dbe_pldeveloper | omm
 jeames          | jeames
 mesdb           | mesdb
 pkg_service     | omm
 public          | omm
 snapshot        | omm
 sqladvisor      | omm
 tpcds1          | omm
(13 rows)
openGauss=# ALTER SCHEMA tpcds1 OWNER TO jeames;
ALTER SCHEMA
openGauss=# \dn+ tpcds1
                          List of schemas
  Name  | 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开头的模式,这些模式是系统内部使用的

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_zhao2
                             List of schemas
     Name      | Owner | Access privileges | Description | WithBlockChain 
---------------+-------+-------------------+-------------+----------------
 teacher_zhao2 | omm   |                   |             | f
openGauss=# CREATE SCHEMA teacher_zhao3 AUTHORIZATION jeames;
CREATE SCHEMA
openGauss=# \dn+ teacher_zhao3
                              List of schemas
     Name      | 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);

以上就是openGauss的SCHEMA的原理及管理介绍的详细内容,更多关于openGauss SCHEMA管理的资料请关注脚本之家其它相关文章!

相关文章

  • 关于hive表的存储格式ORC格式的使用详解

    关于hive表的存储格式ORC格式的使用详解

    这篇文章主要介绍了关于hive表的存储格式ORC格式的使用详解,Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能,需要的朋友可以参考下
    2023-07-07
  • 关于面试中常问的数据库回表问题

    关于面试中常问的数据库回表问题

    这篇文章主要介绍了关于面试中常问的数据库回表问题,回表就是先通过数据库索引扫描出数据所在的行,再通过行主键id取出索引中未提供的数据,即基于非主键索引的查询需要多扫描一棵索引树,需要的朋友可以参考下
    2023-07-07
  • 海量数据库的查询优化及分页算法方案 2 之 改良SQL语句

    海量数据库的查询优化及分页算法方案 2 之 改良SQL语句

    海量数据库的查询优化及分页算法方案 2 之 改良SQL语句...
    2007-03-03
  • DataGrip2022导入和导出sql文件图文教程

    DataGrip2022导入和导出sql文件图文教程

    这篇文章主要给大家介绍了关于DataGrip2022导入和导出sql文件的相关资料,DataGrip的导出功能也是相当强大,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • 取随机记录的语句

    取随机记录的语句

    取随机记录的语句...
    2007-03-03
  • idea中连接数据库时出现SSL错误的问题

    idea中连接数据库时出现SSL错误的问题

    这篇文章主要介绍了idea中连接数据库是出现SSL错误的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • SQL注入绕过的技巧总结

    SQL注入绕过的技巧总结

    这篇文章主要给大家总结了一些关于SQL注入绕过的技巧,其中包括引号绕过、逗号绕过以及比较符(<,>)绕过,文中给出了详细的介绍和示例代码,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-02-02
  • OceanBase建表分区数超限报错解决分析

    OceanBase建表分区数超限报错解决分析

    这篇文章主要为大家介绍了OceanBase建表分区数超限报错解决分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 把Navicat中数据库所有表导出的方法

    把Navicat中数据库所有表导出的方法

    通过Navicat导出数据库中的数据是比较常用的操作之一,下面这篇文章主要给大家介绍了关于如何把Navicat中数据库所有表导出的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • Window下Neo4j安装图文教程

    Window下Neo4j安装图文教程

    这篇文章主要为大家详细介绍了Window下Neo4j安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04

最新评论