广告位联系
返回顶部
分享到

openGauss的SCHEMA的原理及管理介绍

数据库其他 来源:互联网 作者:佚名 发布时间:2023-02-14 21:22:11 人浏览
摘要

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

1

2

3

4

5

6

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

1

2

3

4

5

6

7

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

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、插入记录和查询记录 

1

2

3

4

5

6

7

8

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

DROP SCHEMA tpcds1 CASCADE;

???????????? 补充

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

???? 3.Schema赋权

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

分别创建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:

1

2

3

4

5

6

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);


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://juejin.cn/post/7198894062535098426
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计