Table of Contents
- 上文提要
- 学习目标
- 1. 学会如何查看当前数据库下有哪些模式
- 2. 学会如何创建模式,并查看在同一数据库中创建的4个模式
- 3. 在同一数据库的不同的模式下创建同名的表
- 4. 查看用户在数据库中搜索模式的顺序
- 5. 理解模式是在数据库层面,用户是在实例层面
- 学习内容
- 摘要
- 课前准备
- 1.使用用户user1连接到数据库musicdb,首先查看当前数据库下有哪些模式
- 2.为数据库musicdb创建4个模式: schm1、 schm2、 schm3、 schm4
- 3.在数据库musicdb的不同的模式下创建同名的表
- 4.查看用户在数据库中搜索模式的顺序
- 5.理解模式是在数据库层面,用户是在实例层面
- 课程作业
- 1.查看当前数据库下有哪些模式
- 2.然后为数据库musicdb创建4个模式,名称自定义
- 3.在数据库musicdb的不同的模式下创建同名的表
- 4.访问musicdb数据库下不同模式的同名表
- 5.实验理解:模式是在数据库层面,用户是在实例层面
- 往期内容
本次学习,也是openGauss的体系结构相关内容,有别于用户,让我们一起学习什么是模式,如何合理使用模式。
上文提要
在第五课、第六课中,我们一同学习了用户相关的逻辑体系,知晓了常规情况下,同一个用户和不同用户都只能连接一个数据库并查询其中的表,除非使用dblink工具(尚未尝试,用空试试)。
复习一下:openGauss每日一练第 6 天。
学习目标
本次课程内容为学习openGauss数据库、用户和模式的关系以及访问方式,理解模式是在数据库层面,而用户是在实例层面。
1. 学会如何查看当前数据库下有哪些模式
2. 学会如何创建模式,并查看在同一数据库中创建的4个模式
3. 在同一数据库的不同的模式下创建同名的表
4. 查看用户在数据库中搜索模式的顺序
5. 理解模式是在数据库层面,用户是在实例层面
学习内容
摘要
一个用户连接到数据库后,可以在这个数据库中创建多个模式。要访问这些模式,可以使用DatabaseName.SchemaName.TableName或者SchemaName.TableName,来访问某个模式下的一个表。
默认情况下访问public模式下的表,可以不用添加模式名前缀。
课前准备
--进入数据库omm,创建表空间、测试数据库
drop DATABASE IF EXISTS musicdb;
drop DATABASE IF EXISTS musicdb1;
drop DATABASE IF EXISTS musicdb2;
drop DATABASE IF EXISTS musicdb3;
drop tablespace IF EXISTS music_tbs;
CREATE TABLESPACE music_tbs RELATIVE LOCATION 'tablespace/test_ts1';
CREATE DATABASE musicdb WITH TABLESPACE = music_tbs;
--执行下面的SQL语句,创建用户user1:
CREATE USER user1 IDENTIFIED BY 'kunpeng@1234';
--授予user1数据库系统的SYSADMIN权限:
ALTER USER user1 SYSADMIN;
1.使用用户user1连接到数据库musicdb,首先查看当前数据库下有哪些模式
--使用用户user1连接到数据库musicdb,首先查看当前数据库下有哪些模式;
\q
gsql -d musicdb -U user1 -p 5432 -W kunpeng@1234 -r
\dn
注:
教学代码中,连接数据库的方式,和以往有一些不同解析如下:
gsql -d <database_name> -U <user_name> -p-W ,在未连接数据库的情况下,可以直接使用gsql工具及相关参数,进入指定数据库。-r
我使用的代码:
gsql -r
\c musicdb user1
结果:
2.为数据库musicdb创建4个模式: schm1、 schm2、 schm3、 schm4
–用户user1在数据库musicdb中,创建了4个模式:
create schema schm1 AUTHORIZATION user1;
create schema schm2 AUTHORIZATION user1;
create schema schm3 AUTHORIZATION user1;
create schema schm4 AUTHORIZATION user1;
–查看musicdb数据库下有哪些模式:
\dn
–除了可以用gsql的元命令\dn来查看数据库有哪些模式,还可以执行下面的SQL语句,查看某个数据库下有哪些模式:
SELECT catalog_name, schema_name, schema_owner
FROM information_schema.schemata;
结果:
可以看到,新增的schema已经在列表中了,要记得是使用元命令 \dn 来查看。
当然也可以使用SELECT语句来查询,此处尚有疑问,待解答。
3.在数据库musicdb的不同的模式下创建同名的表
还记得在不同的数据库创建同名表吗,这次要练习的是,在不同的模式下创建同名的表。
--在不同模式下,创建相同的表
create table schm1.ttt(col varchar(100));
create table schm2.ttt(col varchar(100));
create table schm3.ttt(col varchar(100));
create table schm4.ttt(col varchar(100));
--执行下面的SQL语句,往4个模式中的表ttt分别插入一条数据:
--在同一个数据库下,可以直接使用SchemaName.TableName来指定一个表,可以省略数据库名。
insert into schm1.ttt values('Hello! from schema schm1 11111');
insert into schm2.ttt values('Hello! from schema schm2 22222');
insert into schm3.ttt values('Hello! from schema schm3 33333');
insert into schm4.ttt values('Hello! from schema schm4 44444');
--执行下面的SQL语句,查看musicdb数据库目前有哪些表
--创建视图:
create or replace view my_tables as
select table_catalog, table_schema, table_name, table_type
from information_schema.tables
where table_schema not in ('pg_catalog', 'information_schema','dbe_perf');
--查看视图:
select * from my_tables;
注:
CREATE TABLE <schema_name.table_name>(col varchar(100));,在某个模式下创建表。
INSERT INTO <schema_name.table_name> values(‘Hello! from schema schm1 11111’);,在某个模式下的表中插入数据。
上一个学习要点中尚有疑问之处,在本次要点中可以看到一些端倪,创建视图的语句中,排除了pg_catalog
information_schema dbe_perf’ 这三张表,原因尚不可知。可以预知的是,排除的这三张表,是元命令 \dn 中少的3条数据。
具体原因可在进入gsql时加入参数 -E,用以查看元命令具体的sql语句,示例如下:
结果:
4.查看用户在数据库中搜索模式的顺序
--查看默认的搜索模式的顺序
show SEARCH_PATH;
--访问musicdb数据库下其他模式的表,需要指定模式名前缀:
select * from schm1.ttt;
select * from schm2.ttt;
select * from schm3.ttt;
select * from schm4.ttt;
结果:
5.理解模式是在数据库层面,用户是在实例层面
--登录musicdb数据库,查看用户和模式
gsql -d musicdb -U user1 -p 5432 -W kunpeng@1234 -r
\du
\dn
\q
--登录omm数据库,查看用户和模式
gsql -r
\du
\dn
\q
结果对比图:
本次学习目标的要点为:
通过对比,理解模式和用户的区别,在数据库系统不同层面,要点中提到,用户在实例层面,模式在数据库层面。
在通过和群里大佬们的沟通学习下,可归结为:用户是全局的,模式是局部的。
可参考如下示例图:
课程作业
1.查看当前数据库下有哪些模式
gsql -d musicdb -U user1 -p 5432 -W kunpeng@1234 -r
\dn
切记,模式是相对于数据库而言的,所以要进入对应的数据库查看模式。
2.然后为数据库musicdb创建4个模式,名称自定义
create schema schm11 AUTHORIZATION user1;
create schema schm22 AUTHORIZATION user1;
create schema schm33 AUTHORIZATION user1;
create schema schm44 AUTHORIZATION user1;
3.在数据库musicdb的不同的模式下创建同名的表
create table schm11.ttt(col varchar(100));
create table schm22.ttt(col varchar(100));
insert into schm11.ttt values('Hello! from schema schm11 11111');
insert into schm22.ttt values('Hello! from schema schm21 22222');
4.访问musicdb数据库下不同模式的同名表
select * from schm11.ttt;
select * from schm22.ttt;
5.实验理解:模式是在数据库层面,用户是在实例层面
想要真正理解 “模式是在数据库层面,用户是在实例层面” 这句画的意思,需要要更多的学习!
往期内容
openGauss每日一练第 6 天
openGauss每日一练第 5 天
openGauss每日一练第 4 天
openGauss每日一练第 3 天
openGauss每日一练第 2 天
openGauss每日一练第 1 天