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

openGauss 每日一练第 13 天 |openGauss 逻辑结构:表管理 1

444

学习目标

学习 openGauss 表的创建、搜索路径和访问方法等

前面每日一练链接

openGauss 每日一练第 1 天 | openGauss 数据库状态查看
openGauss 每日一练第 2 天 | 学习 gsql 命令行的使用
openGauss 每日一练第 3 天 | openGauss 数据库状态查看
openGauss 每日一练第 4 天 | openGauss 中一个数据库可以被多个用户访问
openGauss 每日一练第 5 天 | openGauss 中一个用户可以访问多个数据库
openGauss 每日一练第 6 天 | openGauss 中用户一次只能连接到一个数据库
openGauss 每日一练第 7 天 | openGauss 中一个数据库中可以创建多个模式
openGauss 每日一练第 8 天 | openGauss 中一个数据库可以存储在多个表空间中
openGauss 每日一练第 9 天 | openGauss 中一个表空间可以存储多个数据库
openGauss 每日一练第 10 天 | openGauss 逻辑结构:表空间管理
openGauss 每日一练第 11 天 | openGauss 逻辑结构:数据库管理
openGauss 每日一练第 12 天 | openGauss 逻辑结构:模式管理

课程学习

1.实验准备:

--创建表空间 enmtbs、数据库 enmdb、用户 user1,并授予用户 user1 SYSADMIN权限:
su - omm
gsql  -r
CREATE TABLESPACE enmtbs RELATIVE LOCATION 'tablespace/enmtbs';
CREATE DATABASE enmdb WITH TABLESPACE = enmtbs;
CREATE USER user1 IDENTIFIED BY 'JiekeXu_1234';
ALTER USER user1  SYSADMIN;
\q

--以数据库用户user1的身份,连接到刚刚创建的数据库enmdb:
gsql -d enmdb   -U user1   -W JiekeXu_1234

--执行下面的SQL语句,创建 enmschm1、enmschm2 模式
create schema enmschm1;
create schema enmschm2;

图片.png

图片.png

2.创建表

默认情况下,在某个数据库上创建的数据库对象(本例是表 testtable),都位于该数据库中的 public 模式中。

--查看默认搜索路径:
show SEARCH_PATH;
--创建一个测试表 testtable,并插入一条数据:
drop table if exists testtable;
create table testtable(col varchar(100));
insert into testtable values('Hello from testtable!');
select * from testtable;
--查看当前数据库 enmdb 下的 public 模式有哪些表:
select table_catalog,table_schema,table_name,table_type
from information_schema.tables 
where table_schema = 'public';

图片.png

3.在不同的模式(public 和 enmschm1),可以创建同名的表 testtable

前面 2 的实验是在 public 模式下创建表 testtable,下面是在模式 enmschm1 中创建同名的表 testtable:

--执行下面的命令,查看当前的模式搜索顺序:
show SEARCH_PATH;

--执行下面的命令,在会话级重新设置模式搜索路径为模式 enmschm1:
SET SEARCH_PATH TO enmschm1;

--执行下面的命令,再次查看当前的模式搜索顺序:
show SEARCH_PATH;

--在数据库 enmdb 的模式 enmschm1 中创建表 testtable:
create table testtable(col1  char(100));
\dt

图片.png

4.为 enmschm1 模式下的 testtable 插入一条测试数据

由于当前的模式搜索顺序为模式 enmschm1,因此不需要指定模式名,就可以为 enmschm1.testtable 插入新行。

insert into testtable values('Hello from testtable IN SCHEMA enmschm1!');

select * from testtable;

图片.png

5.使用 SchemaName.TableName 的表标识方法访问表

虽然当前模式搜索顺序没有模式 enmschm2,但是我们仍然可以在模式 enmschm2 中创建表,方法是使用 SchemaName.TableName 的表标识方法,来指定在哪个模式下创建、插入、查询表。

--执行下面的命令,查看当前的模式搜索顺序:
 show SEARCH_PATH;

--执行下面的 SQL 语句,将在数据库 enmdb 的模式 enmschm2 中创建表 testtable、testtable1、testtable2:

create table enmschm2.testtable(col1  char(100));
create table enmschm2.testtable1(col1 char(100));
create table enmschm2.testtable2(col1 char(100));

--并向模式 enmschm2 中新创建的表 testtable,插入一行数据:

insert into enmschm2.testtable values('Hello from testtable IN SCHEMA enmschm2!');

--查看表中内容:
select * from enmschm2.testtable;

\q

图片.png

6.openGauss 在一个用户连接到 enmdb 数据库时,可以访问不同模式中的表。

--以数据库用户 user1 的身份,连接到数据库 enmdb:
gsql -d enmdb   -U user1   -W JiekeXu_1234 -r

--查看当前会话的模式搜索顺序
show SEARCH_PATH;

 -- 查看不同模式下的表
select * from testtable;
select * from enmschm1.testtable;
select * from enmschm2.testtable;

图片.png

课程作业

1.创建一个表(默认,不指定模式),查看该表在那个模式下

omm=# create table t1(id int);
CREATE TABLE
omm=# \dt
                        List of relations
 Schema | Name | Type  | Owner |             Storage              
--------+------+-------+-------+----------------------------------
 public | t1   | table | omm   | {orientation=row,compression=no}
(1 row)

2.使用一个用户连接到 emodb 数据库,测试该用户可以访问不同模式中的表

create tablespace emotbs relative location 'tablespace/emotbs';
create database emodb;

create user jieke identified by 'JiekeXu_1234';
alter user jieke sysadmin;

create schema s1;
create schema s2;

create table s1.t1(id int);
insert into s1.t1 values(1);

create table s2.t1(id int);
insert into s2.t1 values(2);

select * from s1.t1;
select * from s2.t1;

图片.png

图片.png

3.在会话级设置模式搜索路径为:模式 s1,使用 SchemaName.TableName 的表标识方法访问表(创建表、插入数据和查询表中数据)

show SEARCH_PATH;

SET SEARCH_PATH TO s1;

create table s1.test(col1  char(100));
create table s1.test1(col1 char(100));
create table s1.test2(col1 char(100));

insert into s1.test values('Hello from test IN SCHEMA s1!');

--查看表中内容:
select * from s1.test;

图片.png

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

评论