一個數(shù)據(jù)庫包含多個模式(schema)豆巨,而一個模式可以包含多種命名對象,比如表掐场,數(shù)據(jù)類型往扔,函數(shù)贩猎,操作符等。同一個對象名字可以用在不同的模式中而不產(chǎn)生沖突萍膛。比如schema1中可以包含表test吭服,schema2中也可以同時包含名字為test的表。從這個意義上蝗罗,模式很像一個命名空間(namespace)艇棕。
當(dāng)創(chuàng)建一個對象時,默認(rèn)被放置在public模式中串塑。下面是系統(tǒng)默認(rèn)創(chuàng)建的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)
通常在這樣幾個場景下,用戶需要使用模式:
● 允許多個用戶同時使用一個數(shù)據(jù)庫桩匪,而不產(chǎn)生名字沖突打瘪。
● 把數(shù)據(jù)庫對象組織成多個schema,好像是多個命名空間一樣
● 第三方應(yīng)用可以把它們的對象放到一個單獨的schema中傻昙,而不和其他對象產(chǎn)生從圖闺骚。
注意:schema不可以嵌套,也就是說屋匕,schema中不可以再包含schema葛碧。
下面是創(chuàng)建schema的例子。
create table myschema.test(i int);
select * from myschema.test;
刪除一個空的schema过吻,可以使用:
drop schema myschame;
刪除不空的schema进泼,可以使用cascade關(guān)鍵詞:
drop schema myschema cascade;
使用{schema}.{object}形式,通常用起來不是很方便纤虽∪槿疲可以通過設(shè)置schema搜索路徑來簡化”浦剑”SHOW search_path”命令可以給出當(dāng)前的schema搜索路徑洋措〖嘣鳎”SET search_path TO schema-name1, schema-name2”可以設(shè)置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)