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;

–查看 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;

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;

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;

课后作业
1.创建一个名为tpcds的模式
\dn
create schema tpcds;
\dn

2.创建一个用户tim, 并将tpcds的owner修改为tim,且修改owner前后分别使用\dn+查看模式信息
\du
create user tim password 'JiekeXu1';
\du
\dn+ tpcds
alter schema tpcds owner to tim;
\dn+ tpcds

3.重命名tpcds为tpcds1
\dn
alter schema tpcds rename to tpcds1;
\dn

4.在模式 tpcds1 中建表 customer、插入记录和查询记录
create table tpcds1.t1(id int, name char(30));
insert into tpcds1.t1 values(100 ,'JiekeXu');
select * from tpcds1.t1;

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开头的模式,这些模式是系统内部使用的,如果删除,可能导致无法预知的结果。
说明: 无法删除当前模式。如果要删除当前模式,须切换到其他模式下。

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




