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

openGauss每日一练第 7 天 |学习笔记

原创 newdata 2022-11-30
316

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个模式,名称自定义

创建schema语法

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

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的模式。这个模式自动存在于所有数据库中。信息模式由一组视图构成,它们包含定义在当前数据库中对象的信息。这个模式的拥有者是初始数据库用户,并且该用户自然地拥有这个模式上的所有特权,包括删除它的能力。

schema.jpg

  • 设置所属的模式。

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

评论