一個(gè)數(shù)據(jù)庫(kù)包含一個(gè)或多個(gè)命名的模式,模式又包含表缕溉。模式還包含其它命名的對(duì)象考传,包括數(shù)據(jù)類型、函數(shù)证鸥,以及操作符僚楞。同一個(gè)對(duì)象名可以在不同的模式里使用而不會(huì)導(dǎo)致沖突; 比如枉层,schema1和myschema都可以包含叫做mytable的表泉褐。和數(shù)據(jù)庫(kù)不同,模式不是嚴(yán)格分離的:一個(gè)用戶可以訪問他所連接的數(shù)據(jù)庫(kù)中的任意模式中的對(duì)象鸟蜡,只要他有權(quán)限膜赃。
我們需要模式有以下幾個(gè)主要原因:
1). 允許多個(gè)用戶使用一個(gè)數(shù)據(jù)庫(kù)而不會(huì)干擾其它用戶。
2). 把數(shù)據(jù)庫(kù)對(duì)象組織成邏輯組矩欠,讓它們更便于管理财剖。
3). 第三方的應(yīng)用可以放在不同的模式中,這樣它們就不會(huì)和其它對(duì)象的名字沖突。
- 創(chuàng)建模式:
CREATE SCHEMA myschema;
通過以上命令可以創(chuàng)建名字為myschema的模式,在該模式被創(chuàng)建后菱阵,其便可擁有自己的一組邏輯對(duì)象,如表咪橙、視圖和函數(shù)等。
- public模式:
在介紹后面的內(nèi)容之前虚倒,這里我們需要先解釋一下public模式美侦。每當(dāng)我們創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)時(shí),PostgreSQL都會(huì)為我們自動(dòng)創(chuàng)建該模式魂奥。當(dāng)?shù)卿浀皆摂?shù)據(jù)庫(kù)時(shí)菠剩,如果沒有特殊的指定,我們將以該模式(public)的形式操作各種數(shù)據(jù)對(duì)象耻煤,如:
CREATE TABLE products ( ... ) 等同于 CREATE TABLE public.products ( ... )
- 權(quán)限:
缺省時(shí)具壮,用戶看不到模式中不屬于他們所有的對(duì)象。為了讓他們看得見哈蝇,模式的所有者需要在模式上賦予USAGE權(quán)限棺妓。為了讓用戶使用模式中的對(duì)象,我們可能需要賦予額外的權(quán)限炮赦,只要是適合該對(duì)象的怜跑。PostgreSQL根據(jù)不同的對(duì)象提供了不同的權(quán)限類型,如:
GRANT ALL ON SCHEMA myschema TO public;
上面的ALL關(guān)鍵字將包含CREATE和USAGE兩種權(quán)限吠勘。如果public模式擁有了myschema模式的CREATE權(quán)限性芬,那么登錄到該模式的用戶將可以在myschema模式中創(chuàng)建任意對(duì)象峡眶,如:
CREATE TABLE myschema.products (
product_no integer,
name text,
price numeric CHECK (price > 0),
);
- 刪除模式:
DROP SCHEMA myschema;
如果要?jiǎng)h除模式及其所有對(duì)象,請(qǐng)使用級(jí)聯(lián)刪除:
DROP SCHEMA myschema CASCADE;