暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

openGauss每日一练第6天 | openGauss 模式管理及课后作业

1059

openGauss 每日一练第 6 天学习打卡,巩固 openGauss 数据库模式管理基本操作!

学习目标

学习openGauss创建模式、修改模式属性和删除模式.

前面每日一练链接:

openGauss每日一练第1天 | 数据库和表的基本操作(一)
openGauss每日一练第2天 | 数据库和表的基本操作(二)
openGauss每日一练第3天 | 前三课作业实操练习
openGauss每日一练第4天 | openGauss 角色管理及课后作业
openGauss每日一练第5天 | openGauss 用户管理及课后作业

课程学习

注意:在启动 gsql 的命令行中加上“-E”参数,就可以把 gsql 中各种以“\”开头的命令执行的实际 SQL 语句打印出来.如果在已运行的 gsql 中显示了某个命令实际执行的 SQL 语句后又想关闭此功能,该怎么办?这时可以使用“\set ECHO_HIDDEN on|off”命令。

模式是一组数据库对象的集合,主要用于控制对数据库对象的访问

连接 openGauss

su - omm
gsql -r

1.创建模式

–创建名为ds的模式

创建语法

访问命名对象时可以使用模式名作为前缀进行访问,如果无模式名前缀,则访问当前模式下的命名对象。创建命名对象时也可用模式名作为前缀修饰。

另外,CREATE SCHEMA 可以包括在新模式中创建对象的子命令,这些子命令和那些在创建完模式后发出的命令没有任何区别。如果使用了AUTHORIZATION子句,则所有创建的对象都将被该用户所拥欧耶,第五课用户管理实操及课后作业练习完成啦!有。

注意事项

只要用户对当前数据库有CREATE权限,就可以创建模式。
系统管理员在普通用户同名schema下创建的对象,所有者为schema的同名用户(非系统管理员)。

语法格式

根据指定的名称创建模式。

CREATE SCHEMA schema_name 
        [ AUTHORIZATION user_name ] [WITH BLOCKCHAIN] [ schema_element [ ... ] ];

根据用户名创建模式。

CREATE SCHEMA AUTHORIZATION user_name [ schema_element [ ... ] ];

AUTHORIZATION user_name 指定模式的所有者。当不指定schema_name时,把user_name当作模式名,此时user_name只能是角色名。取值范围:已存在的用户名/角色名。

使用 SQL 查看现有模式

SELECT n.nspname AS "Name",pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner"
FROM pg_catalog.pg_namespace n
WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema' ORDER BY 1;

CREATE SCHEMA ds;

图片.png

–查看 ds 模式信息, owner 为 omm

jiekexu=# \dn+ ds;
********* QUERY **********
SELECT n.nspname AS "Name",
  pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner",
  pg_catalog.array_to_string(n.nspacl, E'\n') AS "Access privileges",
  pg_catalog.obj_description(n.oid, 'pg_namespace') AS "Description"
FROM pg_catalog.pg_namespace n
WHERE n.nspname ~ '^(ds)$'
ORDER BY 1;
**************************

                List of schemas
 Name | Owner | Access privileges | Description 
------+-------+-------------------+-------------
 ds   | omm   |                   | 
(1 row)

2.在 ds 中建表

create table ds.t1(id int, name char(30));
insert into ds.t1 values(1 ,'JiekeXu');
select * from ds.t1;

–查看表信息

\d+ ds.t1;

图片.png

3.修改模式信息

–重命名模式为ds_new

ALTER SCHEMA ds RENAME TO ds_new;
select * from ds_new.t1;

jiekexu=# \dn
   List of schemas
    Name     | Owner 
-------------+-------
 cstore      | omm
 dbe_perf    | omm
 ds          | omm
 pkg_service | omm
 public      | omm
 snapshot    | omm
(6 rows)

jiekexu=# alter schema ds rename to ds_new;
ALTER SCHEMA
jiekexu=# \dn
   List of schemas
    Name     | Owner 
-------------+-------
 cstore      | omm
 dbe_perf    | omm
 ds_new      | omm
 pkg_service | omm
 public      | omm
 snapshot    | omm
(6 rows)

jiekexu=# select * from ds_new.t1;
 id |              name              
----+--------------------------------
  1 | JiekeXu                       
(1 row)

–创建用户jack

CREATE USER jack PASSWORD 'abcd@123';

–将ds_new的所有者修改为jack

ALTER SCHEMA ds_new OWNER TO jack;

–查看ds_new模式信息

\dn+ ds_new;

图片.png

4.删除模式

DROP SCHEMA ds_new;

ERROR:  cannot drop schema ds_new because other objects depend on it
DETAIL:  table ds_new.t1 depends on schema ds_new
HINT:  Use DROP ... CASCADE to drop the dependent objects too.

–当schema非空时,如果要删除一个schema及其包含的所有对象,需要使用CASCADE关键字

DROP SCHEMA ds_new CASCADE;
DROP USER jack;

图片.png

课后作业

1.创建一个名为tpcds的模式

\dn
create schema tpcds;
\dn

图片.png

2.创建一个用户tim, 并将tpcds的owner修改为tim,且修改owner前后分别使用\dn+查看模式信息

\du
create user tim password 'JiekeXu1';
\du
\dn+ tpcds 
alter schema tpcds owner to tim;
\dn+ tpcds 

图片.png

3.重命名tpcds为tpcds1

\dn
alter schema tpcds rename to tpcds1;
\dn

图片.png

4.在模式 tpcds1 中建表 customer、插入记录和查询记录

create table tpcds1.t1(id int, name char(30));
insert into tpcds1.t1 values(100 ,'JiekeXu');
select * from tpcds1.t1;

图片.png

5.删除模式 tpcds1

drop schema tpcds1 cascade;

drop schema 功能描述,从数据库中删除模式。

注意事项

只有模式的所有者或者被授予了模式DROP权限的用户有权限执行DROP SCHEMA命令,系统管理员默认拥有此权限。

语法格式

DROP SCHEMA [ IF EXISTS ] schema_name [, ...] [ CASCADE | RESTRICT ];

参数说明

IF EXISTS

如果指定的模式不存在,发出一个notice而不是抛出一个错误。

schema_name

模式的名称。

取值范围:已存在模式名。

CASCADE | RESTRICT
    CASCADE:自动删除包含在模式中的对象。
    RESTRICT:如果模式包含任何对象,则删除失败(缺省行为)。

须知: 不要随意删除pg_temp或pg_toast_temp开头的模式,这些模式是系统内部使用的,如果删除,可能导致无法预知的结果。

说明: 无法删除当前模式。如果要删除当前模式,须切换到其他模式下。

图片.png

欧耶,第六课模式管理实操及课后作业练习题完成啦!

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论