openGauss的SCHEMA的原理及管理介紹

📣 1.何為Schema摘要:

本篇介紹瞭openGauss的SCHEMA的原理及管理。

Schema又稱作模式。通過管理Schema,允許多個用戶使用同一數據庫而不相互幹擾,可以將數據庫對象組織成易於管理的邏輯組,同時便於將第三方應用添加到相應的Schema下而不引起沖突。

📢📢📢 數據庫(database)、用戶(user)、schema、和表的關系如下圖所示:

每個數據庫包含一個或多個Schema。數據庫中的每個Schema包含表和其他類型的對象。數據庫創建初始,默認具有一個名為public的Schema,且所有用戶都擁有此Schema的usage權限,隻有系統管理員和初始化用戶可以在public Schema下創建函數、存儲過程和同義詞對象,其他用戶即使賦予create權限後也不可以創建上述三種對象。可以通過Schema分組數據庫對象。Schema類似於操作系統目錄,但Schema不能嵌套。

📢📢📢註意要點

相同的數據庫對象名稱可以應用在同一數據庫的不同Schema中 CREATE USER創建用戶的同時,系統會在執行該命令的數據庫中,為該用戶創建一個同名的SCHEMA 可以把schema理解成操作系統的目錄(文件夾),所不同的是schema隻有一層,不能嵌套創建

📣 2.Schema語法

✨ 2.1 創建SCHEMA

語法:CREATE SCHEMA schema_name [ AUTHORIZATION user_name ] ;

案例1:創建一個名為tpcds的模式

openGauss=#  create schema tpcds;
openGauss=# \dn+ tpcds
                         List of schemas
 Name  | Owner | Access privileges | Description | WithBlockChain 
-------+-------+-------------------+-------------+----------------
 tpcds | omm   |                   |             | f

✨ 2.2 修改SCHEMA

修改模式的名稱語法:ALTER SCHEMA schema_name RENAME TO new_name; 修改模式的所有者語法:ALTER SCHEMA schema_name OWNER TO new_owner;

案例1:重命名tpcds為tpcds1

openGauss=# ALTER SCHEMA tpcds RENAME TO tpcds1;
ALTER SCHEMA
openGauss=# \dn+ tpcds1    
                          List of schemas
  Name  | Owner | Access privileges | Description | WithBlockChain 
--------+-------+-------------------+-------------+----------------
 tpcds1 | omm   |                   |             | f

案例2:創建一個用戶jeames, 並將tpcds1的owner修改為jeames

openGauss=# CREATE USER jeames PASSWORD 'abcd@123';
CREATE ROLE
openGauss=# \dn
     List of schemas
      Name       | Owner  
-----------------+--------
 blockchain      | omm
 cstore          | omm
 db4ai           | omm
 dbe_perf        | omm
 dbe_pldebugger  | omm
 dbe_pldeveloper | omm
 jeames          | jeames
 mesdb           | mesdb
 pkg_service     | omm
 public          | omm
 snapshot        | omm
 sqladvisor      | omm
 tpcds1          | omm
(13 rows)
openGauss=# ALTER SCHEMA tpcds1 OWNER TO jeames;
ALTER SCHEMA
openGauss=# \dn+ tpcds1
                          List of schemas
  Name  | Owner  | Access privileges | Description | WithBlockChain 
--------+--------+-------------------+-------------+----------------
 tpcds1 | jeames |                   |             | f

案例3:在模式tpcds1中建表customer、插入記錄和查詢記錄 

openGauss=# create table tpcds1.customer(id int, name char(30));
CREATE TABLE
openGauss=# insert into tpcds1.customer values(1 ,'xxxx');
INSERT 0 1
openGauss=# select * from tpcds1.customer;
 id |              name              
----+--------------------------------
  1 | xxxx                          

✨ 2.3 刪除SCHEMA

語法:DROP SCHEMA schema_name; 註:不要隨意刪除pg_temp或pg_toast_temp開頭的模式,這些模式是系統內部使用的

DROP SCHEMA tpcds1 CASCADE;

📢📢📢 補充

要查看屬於某Schema下的表列表,請查詢系統視圖PG_TABLES: openGauss=# SELECT distinct(tablename),schemaname from pg_tables where schemaname = 'pg_catalog';

📣 3.Schema賦權

普通schema的create權限grant給其他用戶後,其他用戶即可以創建對象。

分別創建schema teacher_zhao2、teacher_zhao3(指定AUTHORIZATION),並把create權限賦給teacher_li:
openGauss=# create SCHEMA teacher_zhao2;
CREATE SCHEMA
openGauss=# \dn+ teacher_zhao2
                             List of schemas
     Name      | Owner | Access privileges | Description | WithBlockChain 
---------------+-------+-------------------+-------------+----------------
 teacher_zhao2 | omm   |                   |             | f
openGauss=# CREATE SCHEMA teacher_zhao3 AUTHORIZATION jeames;
CREATE SCHEMA
openGauss=# \dn+ teacher_zhao3
                              List of schemas
     Name      | Owner  | Access privileges | Description | WithBlockChain 
---------------+--------+-------------------+-------------+----------------
 teacher_zhao3 | jeames |                   |             | f
可以發現沒有指定AUTHORIZATION的情況下,默認創建用戶是clouduser(系統管理員),
而指定情況下,則創建用戶就是指定的用戶。

下面嘗試用jeames登錄,創建數據庫對象teacher_zhao2.t2:

openGauss=# grant create on SCHEMA teacher_zhao2 to jeames;
openGauss=# grant all on all tables in schema teacher_zhao2 to jeames;
openGauss=# grant select on teacher_zhao2.t2 to jeames;
openGauss=> create table teacher_zhao2.t2(a int);
openGauss=# \c postgres jeames
openGauss=> create table teacher_zhao2.t2(a int);

以上就是openGauss的SCHEMA的原理及管理介紹的詳細內容,更多關於openGauss SCHEMA管理的資料請關註WalkonNet其它相關文章!

推薦閱讀: