模式(Schema)
简介
模式(Schema)是数据库的对象之一,用于组织数据库中的表、视图、索引、函数和操作符等对象,其作用如下:
- 逻辑隔离:将数据库对象组织成易于管理的逻辑组,不同的模式可以包含同名的对象而不冲突。
- 权限控制:通过模式可以更细粒度地控制用户对数据库的访问权限。可以在模式级别授予或撤销权限,确保数据的安全性和隔离性。
- 便于管理:模式使得数据库对象管理更加方便灵活,特别是在多应用、多用户的环境中。
创建和管理模式
如下仅介绍一些常用的语法,详情见CREATE SCHEMA、ALTER SCHEMA、DROP SCHEMA。
- 创建Schema
gaussdb=# CREATE SCHEMA sch1 ; CREATE SCHEMA --查看Schema信息。 gaussdb=# \dn sch1 List of schemas Name | Owner ------+------- sch1 | omm (1 row)
- 修改Schema
--前置操作,创建用户。 gaussdb=# CREATE USER u1 PASSWORD '********'; CREATE ROLE --修改模式的名称。 gaussdb=# ALTER SCHEMA sch1 RENAME TO sch2; ALTER SCHEMA --修改模式的拥有者。 gaussdb=# ALTER SCHEMA sch2 OWNER TO u1; ALTER SCHEMA --查看Schema信息。 gaussdb=# \dn sch* List of schemas Name | Owner ------+------- sch2 | u1 (1 row)
- 删除Schema
gaussdb=# DROP SCHEMA sch2; DROP SCHEMA --删除用户。 gaussdb=# DROP USER u1; DROP ROLE
搜索路径
搜索路径用于确定在解析数据库对象名称时,数据库将按照什么顺序去对应的模式下查找。搜索路径的设置可以影响SQL查询的解析和执行。当用户使用一个对象(表、视图、索引、函数等)而没有指定Schema时,数据库会按照搜索路径中定义的顺序依次查找,直到找到该对象时结束。
- 查询搜索路径。
- 设置搜索路径。
- 搜索路径的设置只在当前会话中生效,不会影响到其他会话。
- 创建对象时,如果没有指定Schema,对象将默认创建在搜索路径中第一个Schema中。
--创建模式。 gaussdb=# CREATE SCHEMA sch1; CREATE SCHEMA gaussdb=# CREATE SCHEMA sch2; CREATE SCHEMA --分别在两个模式下创建名称相同的表并插入数据。 gaussdb=# CREATE TABLE sch1.tb_test(c1 int); CREATE TABLE gaussdb=# INSERT INTO sch1.tb_test VALUES (1); INSERT 0 1 gaussdb=# CREATE TABLE sch2.tb_test(c1 int); CREATE TABLE gaussdb=# INSERT INTO sch2.tb_test VALUES (2); INSERT 0 1 --设置搜索路径sch1顺序在前查看表数据。 gaussdb=# SET search_path = sch1,sch2,public; SET gaussdb=# SELECT * FROM tb_test; c1 ---- 1 (1 row) --设置搜索路径sch2顺序在前查看表数据。 gaussdb=# SET search_path = sch2,sch1,public; SET gaussdb=# SELECT * FROM tb_test; c1 ---- 2 (1 row) --重置search_path并删除模式和表。 gaussdb=# RESET search_path; RESET gaussdb=# DROP TABLE sch1.tb_test; DROP TABLE gaussdb=# DROP TABLE sch2.tb_test; DROP TABLE gaussdb=# DROP SCHEMA sch1; DROP SCHEMA gaussdb=# DROP SCHEMA sch2; DROP SCHEMA