?
This document uses PHP Chinese website manual Release
CREATE SCHEMA schema_name [ AUTHORIZATION user_name ] [ schema_element [ ... ] ] CREATE SCHEMA AUTHORIZATION user_name [ schema_element [ ... ] ]
CREATE SCHEMA在當(dāng)前數(shù)據(jù)庫(kù)里輸入一個(gè)新模式。該模式名將在當(dāng)前數(shù)據(jù)庫(kù)里現(xiàn)存的所有模式名中唯一。
模式實(shí)際上是一個(gè)名字空間:它包含命名對(duì)象(表、數(shù)據(jù)類型、函數(shù)、操作符)這些名字可以和其它模式里存在的其它對(duì)象重名。
命名對(duì)象要么是通過用模式名作為前綴"修飾"進(jìn)行訪問,要么是通過設(shè)置一個(gè)搜索路徑包含所需要的模式。
一條帶著無修飾對(duì)象名的CREATE命令都是在當(dāng)前模式中創(chuàng)建的(在搜索路徑最前面的模式;可以用current_schema
函數(shù)來判斷)。
可選的,CREATE SCHEMA可包含在新模式內(nèi)創(chuàng)建對(duì)象的子命令。 該子命令基本上與創(chuàng)建模式之后發(fā)布的獨(dú)立命令相同對(duì)待,除了使用 AUTHORIZATION的情況。所有創(chuàng)建的對(duì)象將由該用戶擁有 另外,CREATE SCHEMA可以包括在新模式中創(chuàng)建對(duì)象的子命令。 這些子命令和那些在創(chuàng)建完模式后發(fā)出的命令沒有任何區(qū)別, 只不過是如果使用了AUTHORIZATION子句,那么所有創(chuàng)建的對(duì)象都將被該用戶擁有。
要?jiǎng)?chuàng)建的模式名字。如果省略,則使用用戶名作為模式名。這個(gè)名字不能以 pg_開頭,因?yàn)檫@樣的名字保留給系統(tǒng)模式使用。
將擁有該模式的用戶的名稱。若省略,默認(rèn)該用戶用此命令。 只有超級(jí)用戶可以創(chuàng)建除其本身以外的其他用戶所有的模式。 將擁有該模式的用戶名。如果省略,缺省為執(zhí)行該命令的用戶名。 只有超級(jí)用戶才能創(chuàng)建不屬于自己的模式。
一個(gè)SQL語句,定義一個(gè)要在模式里創(chuàng)建的對(duì)象。目前,只有 CREATE TABLE,CREATE VIEW,CREATE INDEX,CREATE SEQUENCE,CREATE TRIGGER,GRANT是可以接受的子句。其它類型的對(duì)象可以在創(chuàng)建 完模式之后的獨(dú)立命令里創(chuàng)建。
要?jiǎng)?chuàng)建模式,調(diào)用該命令的用戶必需在當(dāng)前數(shù)據(jù)庫(kù)上有CREATE權(quán)限。 當(dāng)然,超級(jí)用戶可以繞開這個(gè)檢查。
創(chuàng)建一個(gè)模式:
CREATE SCHEMA myschema;
為用戶joe創(chuàng)建模式; 模式名也叫joe:
CREATE SCHEMA AUTHORIZATION joe;
創(chuàng)建一個(gè)模式并且在里面創(chuàng)建一個(gè)表:
CREATE SCHEMA hollywood CREATE TABLE films (title text, release date, awards text[]) CREATE VIEW winners AS SELECT title, release FROM films WHERE awards IS NOT NULL;
請(qǐng)注意上面獨(dú)立的子命令不是由分號(hào)結(jié)尾的。
下面的命令是實(shí)現(xiàn)同樣結(jié)果的等效語句:
CREATE SCHEMA hollywood; CREATE TABLE hollywood.films (title text, release date, awards text[]); CREATE VIEW hollywood.winners AS SELECT title, release FROM hollywood.films WHERE awards IS NOT NULL;
SQL標(biāo)準(zhǔn)允許在CREATE SCHEMA里面有一個(gè) DEFAULT CHARACTER SET子句以及比目前PostgreSQL 可以接受的更多的子命令。
SQL標(biāo)準(zhǔn)聲明在CREATE SCHEMA里的子命令可以以任意順序出現(xiàn)。 目前PostgreSQL里的實(shí)現(xiàn)還不能處理所有子命令里需 要提前引用的情況;有時(shí)候可能需要重排一下子命令的順序以避免前向引用。
在SQL標(biāo)準(zhǔn)里,模式的所有者總是擁有其中的所有對(duì)象。PostgreSQL 允許模式包含非模式所有者所有的對(duì)象。只有在模式所有者 CREATE 了自己的模式的 權(quán)限給了其他人才可能出現(xiàn)。