经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » XML相关 » Schema » 查看文章
openGauss的SCHEMA的原理及管理介绍
来源:jb51  时间:2023/2/15 9:19:26  对本文有异议

?? 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的模式

  1. openGauss=# create schema tpcds;
  2. openGauss=# \dn+ tpcds
  3. List of schemas
  4. Name | Owner | Access privileges | Description | WithBlockChain
  5. -------+-------+-------------------+-------------+----------------
  6. 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. openGauss=# ALTER SCHEMA tpcds RENAME TO tpcds1;
  2. ALTER SCHEMA
  3. openGauss=# \dn+ tpcds1
  4. List of schemas
  5. Name | Owner | Access privileges | Description | WithBlockChain
  6. --------+-------+-------------------+-------------+----------------
  7. tpcds1 | omm | | | f

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

  1. openGauss=# CREATE USER jeames PASSWORD 'abcd@123';
  2. CREATE ROLE
  3. openGauss=# \dn
  4. List of schemas
  5. Name | Owner
  6. -----------------+--------
  7. blockchain | omm
  8. cstore | omm
  9. db4ai | omm
  10. dbe_perf | omm
  11. dbe_pldebugger | omm
  12. dbe_pldeveloper | omm
  13. jeames | jeames
  14. mesdb | mesdb
  15. pkg_service | omm
  16. public | omm
  17. snapshot | omm
  18. sqladvisor | omm
  19. tpcds1 | omm
  20. (13 rows)
  21. openGauss=# ALTER SCHEMA tpcds1 OWNER TO jeames;
  22. ALTER SCHEMA
  23. openGauss=# \dn+ tpcds1
  24. List of schemas
  25. Name | Owner | Access privileges | Description | WithBlockChain
  26. --------+--------+-------------------+-------------+----------------
  27. tpcds1 | jeames | | | f

案例3:在模式tpcds1中建表customer、插入记录和查询记录 

  1. openGauss=# create table tpcds1.customer(id int, name char(30));
  2. CREATE TABLE
  3. openGauss=# insert into tpcds1.customer values(1 ,'xxxx');
  4. INSERT 0 1
  5. openGauss=# select * from tpcds1.customer;
  6. id | name
  7. ----+--------------------------------
  8. 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. 分别创建schema teacher_zhao2teacher_zhao3(指定AUTHORIZATION),并把create权限赋给teacher_li
  2. openGauss=# create SCHEMA teacher_zhao2;
  3. CREATE SCHEMA
  4. openGauss=# \dn+ teacher_zhao2
  5. List of schemas
  6. Name | Owner | Access privileges | Description | WithBlockChain
  7. ---------------+-------+-------------------+-------------+----------------
  8. teacher_zhao2 | omm | | | f
  9. openGauss=# CREATE SCHEMA teacher_zhao3 AUTHORIZATION jeames;
  10. CREATE SCHEMA
  11. openGauss=# \dn+ teacher_zhao3
  12. List of schemas
  13. Name | Owner | Access privileges | Description | WithBlockChain
  14. ---------------+--------+-------------------+-------------+----------------
  15. teacher_zhao3 | jeames | | | f
  16. 可以发现没有指定AUTHORIZATION的情况下,默认创建用户是clouduser(系统管理员),
  17. 而指定情况下,则创建用户就是指定的用户。

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

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

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号