openGauss的SCHEMA的原理及管理方法是什么

蜗牛 互联网技术资讯 2023-02-14 59 0

这篇文章主要介绍“openGauss的SCHEMA的原理及管理方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“openGauss的SCHEMA的原理及管理方法是什么”文章能帮助大家解决问题。

    1.何为Schema摘要:

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

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

    openGauss的SCHEMA的原理及管理方法是什么  opengauss 第1张

    每个数据库包含一个或多个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

    openGauss的SCHEMA的原理及管理方法是什么  opengauss 第2张

    ✨ 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

    openGauss的SCHEMA的原理及管理方法是什么  opengauss 第3张

    案例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;

    openGauss的SCHEMA的原理及管理方法是什么  opengauss 第4张

    补充

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

    openGauss的SCHEMA的原理及管理方法是什么  opengauss 第5张

    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 第6张

    关于“openGauss的SCHEMA的原理及管理方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注蜗牛博客行业资讯频道,小编每天都会为大家更新不同的知识点。

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    评论

    有免费节点资源,我们会通知你!加入纸飞机订阅群

    ×
    天气预报查看日历分享网页手机扫码留言评论Telegram