本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
CREATE SCHEMA
為目前資料庫定義新的結構描述。
所需權限
以下是 CREATE 的必要權限SCHEMA:
超級使用者
具有 CREATESCHEMA權限的使用者
語法
CREATE SCHEMA [ IF NOT EXISTS ] schema_name [ AUTHORIZATION username ] [ QUOTA {quota [MB | GB | TB] | UNLIMITED} ] [ schema_element [ ... ] CREATE SCHEMA AUTHORIZATION username[ QUOTA {quota [MB | GB | TB] | UNLIMITED} ] [ schema_element [ ... ] ]
參數
- IF NOT EXISTS
-
此子句會指出,若指定的結構描述已存在,則命令不應進行任何變更,且應傳回結構描述存在的訊息,而不是在發生錯誤的情況下終止。
此子句在指令碼時很有用,因此如果CREATESCHEMA嘗試建立已存在的結構描述,指令碼不會失敗。
- schema_name
-
新結構描述的名稱。結構描述名稱不可以是
PUBLIC
。如需有效名稱的相關資訊,請參閱 名稱與識別碼。注意
search_path 組態參數中結構描述的清單會決定,在沒有結構描述名稱的情況下參考名稱相同的物件時,這些物件的優先順序。
- AUTHORIZATION
-
將所有權提供給指定使用者的子句。
- username
-
結構描述擁有者的名稱。
- schema_element
-
要在結構描述內建立的一個或多個物件的定義。
- QUOTA
-
所指定之結構描述可以使用的磁碟空間數上限。這個空間是集體磁碟使用量。它包含所有永久資料表、指定結構描述下的具體化檢視,以及在每個運算節點上ALL分佈的所有資料表複本。結構描述配額不會將暫時資料表納入考量,此暫時資料表是作為暫時命名空間或結構描述一部分而建立的。
若要檢視設定的結構描述配額,請參閱 SVV_SCHEMA_QUOTA_STATE。
若要檢視超出結構描述配額的記錄,請參閱 STL_SCHEMA_QUOTA_VIOLATIONS。
Amazon Redshift 會將選取的值轉換為 MB。GB 是您未指定值時的預設測量單位。
您必須是資料庫超級使用者,才能設定和變更結構描述配額。非超級使用者但具有 CREATE SCHEMA 許可的使用者可以建立具有定義配額的結構描述。當您在未定義配額的情況下建立結構描述時,結構描述會有無限的配額。當您將配額設為低於結構描述所使用的目前值時,除非您釋放磁碟空間,否則 Amazon Redshift 不允許進一步擷取。DELETE 陳述式會從資料表中刪除資料,且僅在VACUUM執行時釋放磁碟空間。
Amazon Redshift 會在確認交易之前檢查每筆交易是否存在配額違規情況。Amazon Redshift 會根據設定的配額,檢查每個已修改結構描述的大小 (結構描述中所有資料表使用的磁碟空間)。因為配額違規檢查發生在交易結束時,所以在確定之前,大小限制可以暫時超過交易內的配額。當交易超過配額時,Amazon Redshift 會停止交易、禁止後續導入,並還原所有變更,直到您釋放磁碟空間為止。由於背景VACUUM和內部清除,在您取消交易後檢查結構描述時,結構描述可能尚未完全完成。
在例外情況下,Amazon Redshift 會忽略配額違規,並在特定情況下遞交交易。Amazon Redshift 會針對僅包含下列一或多個陳述式的交易執行此操作,其中相同交易中沒有 INSERT或 COPY 擷取陳述式:
-
DELETE
-
TRUNCATE
-
VACUUM
-
DROP TABLE
-
ALTER TABLE APPEND 只有在將資料從完整結構描述移至其他非完整結構描述時
-
- UNLIMITED
-
Amazon Redshift 不會限制結構描述總大小的增長。
限制
Amazon Redshift 會對結構描述強制實施下列限制。
-
每個資料庫最多 9900 個結構描述。
範例
下列範例會建立名為 US_SALES 的結構描述,並將所有權授予使用者 DWUSER。
create schema us_sales authorization dwuser;
下列範例會建立名為 US_ 的結構描述SALES,將擁有權授予使用者 DWUSER,並將配額設定為 50 GB。
create schema us_sales authorization dwuser QUOTA 50 GB;
若要檢視新的結構描述,請查詢 PG_NAMESPACE 目錄表,如下所示。
select nspname as schema, usename as owner from pg_namespace, pg_user where pg_namespace.nspowner = pg_user.usesysid and pg_user.usename ='dwuser'; schema | owner ----------+---------- us_sales | dwuser (1 row)
下列範例會建立 US_SALES 結構描述,或者不執行任何動作,如果訊息已經存在,則傳回訊息。
create schema if not exists us_sales;