Kingbase数据库模式介绍

1.概述

        一个Kingbase数据库集群包含一个或多个已命名的数据库。用户和用户组在整个集群范围是共享的,但是拥有的数据并不共享。任何与服务器连接的客户端都只能访问在连接请求里声明的数据库。集群中的用户并不一定要有访问集群内所有数据库的权限。共享用户名是指不能有重名用户。若同一集群有两个数据库和一个joe用户,系统可配置为只允许joe访问其中一个数据库。一个数据库包含一个或多个已命名的模式,模式包含表及其它对象,如数据类型、函数、操作符等。相同对象名可以在不同模式定义和使用但不会冲突。与数据库不同,模式不是严格分离的,只要有权限,一个用户可以访问所连接的数据库中的任意模式中的对象。

2. 模式的优点

1)允许多个用户使用一个数据库而不会干扰其它用户。

2)将数据库对象组织成逻辑组,使得它们更便于管理。

3)第三方的应用可以放在不同的模式中,但不会和其它同名对象冲突。

注:模式类似于操作系统层次的目录,但不能嵌套。

3. 创建模式

1) 要创建或者访问模式中的对象,写出一个受修饰的名字,该名字包含模式名及表名,它们之间用一个句点分开。

模式创建语句:

CREATE SCHEMA 模式名;

在模式中创建一个表:

CREATE TABLE test_schema.test_table(id INT, name varchar(20));

INSERT INTO test_schema.test_table(id, name) VALUES(12, 'join'),(13, 'bob');

SELECT * FROM test_schema.test_table;

该方式在任何需要表的地方都可用,实际上,更一般的使用模式中表的语法是:database.schema.table

SELECT * FROM test.test_schema.test_table;

2)若一个模式是空的(所有它里面的对象都已经被删除),删除命令为:

DROP SCHEMA test_schema;

        若一个模式不是空的(如模式里面有表),删除命令为:

DROP SCHEMA test_schema CASCADE;

3)若想创建一个他人的模式,需要有创建的权限:

select usename from pg_user;

select current_user;

CREATE SCHEMA schema_name AUTHORIZATION sao;

在当前用户创建模式能成功:

CREATE SCHEMA schema_name AUTHORIZATION kmxiao;

4)若没有声明任何模式名字创建了表,则缺省时,表及其对象会自动放到public模式中,每个数据库都包含这样的模式,以下命令是等价的:

CREATE TABLE test_table(id INT);和CREATE TABLE public.test_table_2(id INT);

可见,两种创建表的方式都属于public模式。

4. 模式搜索路径

1)由于使用指定模式中的数据库对象时写出模式名.对象名的方式不方便,因此,表通常使用未修饰的名字引用,该名字只含有表名。系统通过查找一个搜索路径来判断一个表究竟是哪个表,该路径是一个需要查找的模式名列表。在搜索路径里找到的第一个表将被使用。若在搜索路径中没有找到表,将会报告一个错误(即便在数据库其它模式中存在此表)

2)显示当前模式:

SHOW search_path;

设置模式的搜素路径后,就可以不使用模式修饰来访问表:

CREATE SCHEMA test_schema;

SET search_path TO kmxiao,test_schema;

        当新对象缺省时,将会被默认创建在该模式下,若不明确进行修饰,就不能访问public模式,public模式没有任何特别之处,只是它缺省时就存在,当然也可以将其删除。搜索路径对于数据类型名、函数名、操作符名的运作方式和表名完全相同。数据类型和函数名可以像表名一样加以修饰。

5. 模式和权限

        用户也可以在别人的模式里创建对象,若要这样做,需要赋予在该模式上的CREATE权限。缺省时每个人都在public模式上有CREATE和USAGE权限,这样会允许所有可连接到指定数据库上的用户创建对象,当然也可以撤销该权限。

语法为:

REVOKE CREATE ON SCHEMA public FROM PUBLIC;

创建用户test_user可在public模式下创建表,执行撤销权限:

REVOKE CREATE ON SCHEMA public FROM PUBLIC;

创建表由于权限不够而被拒绝。

在kmxiao用户下创建的test_schema模式,用户test_user不能创建表,在kmxiao用户下赋予test_user用户创建表的权限:

GRANT CREATE ON SCHEMA test_schema to test_user;

6. 系统表模式

        除了public和用户创建的模式外,每个数据库都包含一个sys_catalog模式,它包含了系统表和所有内置数据类型、函数、操作符。

切换到sys_catalog模式:

SET search_path TO kmxiao, sys_catalog;

查看系统表:

SELECT table_name FROM information_schema.tables WHERE table_schema = 'sys_catalog';

查看内置数据类型:

SELECT typname FROM sys_type WHERE typtype = 'b';

查看内置函数:

SELECT proname FROM sys_proc;

查看内置操作符:

SELECT oprname FROM sys_operator;

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值