共计 1517 个字符,预计需要花费 4 分钟才能阅读完成。
一个 OushuDB 数据库集群蕴含一个或多个已命名数据库。用户和用户组在整个集群范畴内是共享的,然而其它数据并不共享。任何与服务器连贯的客户都只能拜访那个在连贯申请里申明的数据库。
Note
集群中的用户并不一定要有拜访集群内所有数据库的权限。共享用户名的意思是不能有重名用户。假设同一个集群里有两个数据库和一个 joe 用户,零碎能够配置成只容许 joe 拜访其中的一个数据库。
一个数据库蕴含一个或多个已命名的模式,模式又蕴含表。模式还能够蕴含其它对象,包含数据类型、函数、操作符等。同一个对象名能够在不同的模式里应用而不会导致抵触;比方,schema1 和 myschema 都能够蕴含一个名为 mytable 的表。和数据库不同,模式不是严格拆散的:只有有权限,一个用户能够拜访他所连贯的数据库中的任意模式中的对象。
咱们须要模式的起因有很多:
● 容许多个用户应用一个数据库而不会烦扰其它用户。
● 把数据库对象组织成逻辑组,让它们更便于管理。
● 第三方的利用能够放在不同的模式中,这样它们就不会和其它对象的名字抵触。
模式相似于操作系统档次的目录,只不过模式不能嵌套。
1、创立模式
要创立一个模式,应用 CREATE SCHEMA 命令。给出你抉择的模式名字。比方:
CREATE SCHEMA myschema;
要创立或者拜访在模式中的对象,写出一个 受润饰 的名字,这个名字蕴含模式名以及表名,它们之间用一个句点离开:
schema.table
这个形式在任何须要表名字的中央都可用,包含前面探讨的表批改命令和数据拜访命令。出于简化,咱们将只探讨表,这个概念实用于所有其它已命名对象类型,比方数据类型和函数。
实际上,更个别的语法:
database.schema.table
也能够应用,但目前它只是为了和 SQL 规范 模式上 兼容。如果你写了一个数据库名,那么它必须和你以后连贯的数据库同名。
要在新模式里创立一个表,用:
CREATE TABLE myschema.mytable (…);
如果一个模式是空的(所有它外面的对象都曾经删除),那么删除它的命令如下:
DROP SCHEMA myschema;
要删除一个模式及其蕴含的所有对象,能够应用:
DROP SCHEMA myschema CASCADE;
通常你想创立一个别人领有的模式(因为这是一种限度用户在定义良好的模式中的流动的办法)。其语法如下:
CREATE SCHEMA schemaname AUTHORIZATION username;
你甚至能够省略模式名字,这时模式名将和用户名同名。参阅 http://www.oushu.com/docs/ch/… 获取这种状况的实用场合。
以 pg_结尾的模式名是保留给零碎应用的,用户不能创立这样的名字。
2、public 模式
在后面的大节里,咱们没有申明任何模式名字就创立了表。缺省时,这样的表 (以及其它对象) 都主动放到一个叫做”public”的模式中去了。每个新数据库都蕴含一个这样的模式。因而,上面的命令是等效的:
CREATE TABLE products (...);
和:CREATE TABLE public.products (...);
上面是零碎默认创立的 schema。
template1=# \dnList of schemasName | Owner--------------------+----------hawq_toolkit | ChangLeiinformation_schema | ChangLeipg_aoseg | ChangLeipg_bitmapindex | ChangLeipg_catalog | ChangLeipg_toast | ChangLeipublic | ChangLei(7 rows)