一个数据库蕴含多个模式(schema),而一个模式能够蕴含多种命名对象,比方表,数据类型,函数,操作符等。同一个对象名字能够用在不同的模式中而不产生抵触。比方schema1中能够蕴含表test,schema2中也能够同时蕴含名字为test的表。从这个意义上,模式很像一个命名空间(namespace)。
当创立一个对象时,默认被搁置在public模式中。上面是零碎默认创立的schema。
template1=# \dn
List of schemas
Name | Owner
--------------------+----------
hawq_toolkit | ChangLei
information_schema | ChangLei
pg_aoseg | ChangLei
pg_bitmapindex | ChangLei
pg_catalog | ChangLei
pg_toast | ChangLei
public | ChangLei
(7 rows)
通常在这样几个场景下,用户须要应用模式:
● 容许多个用户同时应用一个数据库,而不产生名字抵触。
● 把数据库对象组织成多个schema,如同是多个命名空间一样
● 第三方利用能够把它们的对象放到一个独自的schema中,而不和其余对象产生从图。
留神:schema不能够嵌套,也就是说,schema中不能够再蕴含schema。
上面是创立schema的例子。
create schema myschema;
创立或者存取一个schema中的对象,能够应用{schema}.{object}模式,例如:
create table myschema.test(i int);
select * from myschema.test;
删除一个空的schema,能够应用:
drop schema myschame;
删除不空的schema,能够应用cascade关键词:
drop schema myschema cascade;
应用{schema}.{object}模式,通常用起来不是很不便。能够通过设置schema搜寻门路来简化。”SHOW search_path”命令能够给出以后的schema搜寻门路。”SET search_path TO schema-name1, schema-name2”能够设置schema搜寻门路。例如:
postgres=# show search_path;
search_path
----------------
"$user",public
(1 row)
postgres=# create schema myschema;
CREATE SCHEMA
postgres=# set search_path = public, myschema;
SET
postgres=# show search_path;
search_path
------------------
public, myschema
(1 row)
发表回复