openGauss每日一练第7天
今日目标:学习openGauss数据库、用户和模式的关系和访问方式,理解模式是在数据库层面,用户是在实例层面
了解schema的基本概念及常用命令
SCHEMA
SCHEMA又称作模式。通过管理SCHEMA,允许多个用户使用同一数据库而不相互干扰,可以将数据库对象组织成易于管理的逻辑组,同时便于将第三方应用添加到相应的SCHEMA下而不引起冲突。
每个数据库包含一个或多个SCHEMA。数据库中的每个SCHEMA包含表和其他类型的对象。数据库创建初始,默认具有一个名为PUBLIC的SCHEMA,且所有用户都拥有此SCHEMA的USAGE权限,只有系统管理员和初始化用户可以在PUBLIC SCHEMA下创建函数、存储过程和同义词对象,其他用户即使赋予CREATE权限后也不可以创建上述三种对象。可以通过SCHEMA分组数据库对象。SCHEMA类似于操作系统目录,但SCHEMA不能嵌套。
相同的数据库对象名称可以应用在同一数据库的不同SCHEMA中,而没有冲突。例如,a_schema和b_schema都可以包含名为mytable的表。具有所需权限的用户可以访问数据库的多个SCHEMA中的对象。
通过CREATE USER创建用户的同时,系统会在执行该命令的数据库中,为该用户创建一个同名的SCHEMA。
创建和管理schema
1.实验准备
创建表空间music_tbs ,并在该表空间下创建数据库musicdb
创建user1,并授予sysadmin权限
omm=# create tablespace music_tbs relative location 'tablespace/test_ts1';
CREATE TABLESPACE
omm=# create database musicdb with tablespace = music_tbs ;
CREATE DATABASE
omm=# create user user1 sysadmin identified by 'gauss@1234';
NOTICE: The encrypted password contains MD5 ciphertext, which is not secure.
CREATE ROLE
omm=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+----------+---------+-------+-------------------
musicdb | omm | UTF8 | C | C |
omm | omm | UTF8 | C | C |
postgres | omm | UTF8 | C | C |
template0 | omm | UTF8 | C | C | =c/omm +
| | | | | omm=CTc/omm
template1 | omm | UTF8 | C | C | =c/omm +
| | | | | omm=CTc/omm
(5 rows)
omm=# \dt
No relations found.
omm=# \du
List of roles
Role name | Attributes | Me
mber of
-----------+------------------------------------------------------------------------------------------------------------------+---
--------
gaussdb | Sysadmin | {}
omm | Sysadmin, Create role, Create DB, Replication, Administer audit, Monitoradmin, Operatoradmin, Policyadmin, UseFT | {}
user1 | Sysadmin | {}
omm=#
2.课后作业
2.1 查看当前数据库下有哪些模式(schema)
\q // quit gsql
\dn[S+] [PATTERN] // list schemas
omm=# \q
omm@modb:~$ gsql -d musicdb -p 5432 -U user1 -W gauss@1234 -r
gsql ((openGauss 3.0.0 build 02c14696) compiled at 2022-04-01 18:12:00 commit 0 last mr )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
musicdb=> \dn
List of schemas
Name | Owner
-----------------+-------
blockchain | omm
cstore | omm
db4ai | omm
dbe_perf | omm
dbe_pldebugger | omm
dbe_pldeveloper | omm
pkg_service | omm
public | omm
snapshot | omm
sqladvisor | omm
(10 rows)
musicdb=> \dn+
List of schemas
Name | Owner | Access privileges | Description | WithBlockChain
-----------------+-------+-------------------+----------------------------------+----------------
blockchain | omm | | blockchain schema | f
cstore | omm | | reserved schema for DELTA tables | f
db4ai | omm | omm=UC/omm +| db4ai schema | f
| | =U/omm | |
dbe_perf | omm | | dbe_perf schema | f
dbe_pldebugger | omm | omm=UC/omm +| dbe_pldebugger schema | f
| | =U/omm | |
dbe_pldeveloper | omm | omm=UC/omm +| dbe_pldeveloper schema | f
| | =U/omm | |
pkg_service | omm | | pkg_service schema | f
public | omm | omm=UC/omm +| standard public schema | f
sqladvisor | omm | omm=UC/omm +| sqladvisor schema | f
| | =U/omm | |
(10 rows)
| | =U/omm | |
snapshot | omm | | snapshot schema | f
musicdb=>
2.2 然后为数据库musicdb创建4个模式,名称自定义
- 根据指定的名称创建模式。
CREATE SCHEMA schema_name
[ AUTHORIZATION user_name ] [WITH BLOCKCHAIN] [ schema_element [ … ] ];
- 根据用户名创建模式
CREATE SCHEMA AUTHORIZATION user_name [ schema_element [ … ] ];
schema查看
- 使用gsql查看
\dn+
– 执行SQL语句,查看某个数据库下有哪些模式
select catalog_name,schema_name,schema_owner from information_schema.schemata ;
信息模式本身是一个名为information_schema的模式。这个模式自动存在于所有数据库中。信息模式由一组视图构成,它们包含定义在当前数据库中对象的信息。这个模式的拥有者是初始数据库用户,并且该用户自然地拥有这个模式上的所有特权,包括删除它的能力。

- 设置所属的模式。
SET [ SESSION | LOCAL ]
{CURRENT_SCHEMA { TO | = } { schema | DEFAULT }
| SCHEMA ‘schema’};
musicdb=> create schema schm1 authorization user1;
CREATE SCHEMA
musicdb=> create schema schm2 authorization user2;
ERROR: role "user2" does not exist
musicdb=> create schema schm2 authorization user;;
musicdb=> ^C
musicdb=> create schema schm2 authorization user1;
musicdb=> CREATE SCHEMA
musicdb=>
musicdb=> create schema schm3 authorization user1;
CREATE SCHEMA
musicdb=> create schema schm4 authorization user1;
CREATE SCHEMA
musicdb=> \dn
List of schemas
Name | Owner
-----------------+-------
blockchain | omm
cstore | omm
db4ai | omm
dbe_perf | omm
dbe_pldebugger | omm
dbe_pldeveloper | omm
pkg_service | omm
public | omm
schm1 | user1
schm2 | user1
schm3 | user1
schm4 | user1
snapshot | omm
sqladvisor | omm
musicdb=> select catalog_name,schema_name,schema_owner from information_schema.schemata ;
catalog_name | schema_name | schema_owner
--------------+--------------------+--------------
musicdb | pg_toast | omm
musicdb | cstore | omm
musicdb | pkg_service | omm
musicdb | dbe_perf | omm
musicdb | snapshot | omm
musicdb | blockchain | omm
musicdb | pg_catalog | omm
musicdb | public | omm
musicdb | sqladvisor | omm
musicdb | dbe_pldebugger | omm
musicdb | dbe_pldeveloper | omm
musicdb | information_schema | omm
musicdb | db4ai | omm
musicdb | schm1 | user1
musicdb | schm2 | user1
musicdb | schm3 | user1
musicdb | schm4 | user1
2.3 在数据库musicdb的不同的模式下创建同名的表
musicdb=> create table schm1.ttt(col varchar(100));
CREATE TABLE
musicdb=> create table schm2.ttt(col varchar(100));
CREATE TABLE
musicdb=> create table schm3.ttt(col varchar(100));
CREATE TABLE
musicdb=> create table schm4.ttt(col varchar(100));
CREATE TABLE
musicdb=>
musicdb=> insert into schm1.ttt values('hello schema schm1 11111');
INSERT 0 1
musicdb=> insert into schm2.ttt values('hello schema schm2 22222');
INSERT 0 1
musicdb=> insert into schm3.ttt values('hello schema schm3 33333');
INSERT 0 1
musicdb=> insert into schm4.ttt values('hello schema schm4 44444');
INSERT 0 1
musicdb=> \dt
No relations found.
musicdb=> \dt
No relations found.
musicdb=> \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------------------------------------------------------------+-----------
gaussdb | Sysadmin | {}
omm | Sysadmin, Create role, Create DB, Replication, Administer audit, Monitoradmin, Operatoradmin, Policyadmin, UseFT | {}
user1 | Sysadmin | {}
musicdb=> \dn
List of schemas
Name | Owner
-----------------+-------
blockchain | omm
cstore | omm
db4ai | omm
dbe_perf | omm
dbe_pldebugger | omm
dbe_pldeveloper | omm
pkg_service | omm
public | omm
schm1 | user1
schm2 | user1
schm3 | user1
schm4 | user1
snapshot | omm
sqladvisor | omm
(14 rows)
musicdb=> set current_schema to schm1;
SET
musicdb=> \dt
List of relations
Schema | Name | Type | Owner | Storage
--------+------+-------+-------+----------------------------------
schm1 | ttt | table | user1 | {orientation=row,compression=no}
(1 row)
musicdb=>
musicdb=> create or replace view my_tables as
musicdb-> select table_catalog, table_schema, table_name, table_type
musicdb-> from information_schema.tables
musicdb-> where table_schema not in ('pg_catalog', 'information_schema','dbe_perf');
CREATE VIEW
musicdb=> select * from my_tables ;
table_catalog | table_schema | table_name | table_type
---------------+-----------------+------------+------------
musicdb | db4ai | snapshot | BASE TABLE
musicdb | dbe_pldeveloper | gs_errors | BASE TABLE
musicdb | dbe_pldeveloper | gs_source | BASE TABLE
musicdb | public | my_tables | VIEW
musicdb | schm4 | ttt | BASE TABLE
musicdb | schm3 | ttt | BASE TABLE
musicdb | schm2 | ttt | BASE TABLE
musicdb | schm1 | ttt | BASE TABLE
(8 rows)
musicdb=>
2.4.访问musicdb数据库下不同模式的同名表
musicdb=> show search_path;
search_path
----------------
"$user",public
(1 row)
musicdb=> select * from schm1.ttt ;
col
----------------------------
hello schema schm1 11111
(1 row)
musicdb=> select * from schm2.ttt ;
musicdb=> col
----------------------------
hello schema schm2 22222
(1 row)
musicdb=> select * from schm3.ttt ;
(1 row)
musicdb=> col
----------------------------
hello schema schm3 33333
musicdb=> select * from schm4.ttt ;
col
----------------------------
hello schema schm4 44444
(1 row)
musicdb=>
实验理解:模式是在数据库层面,用户是在实例层面
--登录musicdb数据库,查看用户和模式
musicdb=> \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------------------------------------------------------------+-----------
gaussdb | Sysadmin | {}
omm | Sysadmin, Create role, Create DB, Replication, Administer audit, Monitoradmin, Operatoradmin, Policyadmin, UseFT | {}
user1 | Sysadmin | {}
musicdb=> \dt
No relations found.
musicdb=> \dn
List of schemas
Name | Owner
-----------------+-------
blockchain | omm
cstore | omm
db4ai | omm
dbe_perf | omm
dbe_pldebugger | omm
dbe_pldeveloper | omm
pkg_service | omm
public | omm
schm1 | user1
schm2 | user1
schm3 | user1
schm4 | user1
snapshot | omm
sqladvisor | omm
(14 rows)
musicdb=> \q
-- 登录omm数据库,查看用户和模式
omm@modb:~$ gsql -r
gsql ((openGauss 3.0.0 build 02c14696) compiled at 2022-04-01 18:12:00 commit 0 last mr )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
omm=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------------------------------------------------------------+-----------
gaussdb | Sysadmin | {}
omm | Sysadmin, Create role, Create DB, Replication, Administer audit, Monitoradmin, Operatoradmin, Policyadmin, UseFT | {}
user1 | Sysadmin | {}
omm=# \dn
List of schemas
Name | Owner
-----------------+-------
blockchain | omm
cstore | omm
db4ai | omm
dbe_perf | omm
dbe_pldebugger | omm
dbe_pldeveloper | omm
pkg_service | omm
public | omm
snapshot | omm
sqladvisor | omm
user1 | user1
(11 rows)
omm=#




