本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Aurora DSQL 的 DDL 和分散式交易
Aurora DSQL 的資料定義語言 (DDL) 行為與 PostgreSQL 不同。Aurora DSQL 具有多可用區域的分散式、不共用物件資料庫層,其建置在多租用戶運算和儲存機群之上。由於不存在單一主要資料庫節點或領導節點,因此資料庫目錄為分散式。亦即,Aurora DSQL 會以分散式交易方式管理 DDL 結構描述變更。
具體來說,Aurora DSQL 的 DDL 行為有下列不同:
- 並行控制錯誤
-
如果執行交易時其他交易正在更新資源,Aurora DSQL 會傳回並行控制違規錯誤。例如,假設發生下列一系列動作:
-
在工作階段 1 中,使用者將資料欄新增至資料表
mytable。 -
在工作階段 2 中,使用者嘗試將資料列插入
mytable。Aurora DSQL 傳回錯誤
SQL Error [40001]: ERROR: schema has been updated by another transaction, please retry: (OC001).
-
- 相同交易中的 DDL 和 DML
-
Aurora DSQL 的交易只能包含一個 DDL 陳述式,且不能同時包含 DDL 和 DML 陳述式。此限制表示您無法建立資料表,並將資料插入相同交易的相同資料表中。例如,Aurora DSQL 支援以下序列交易。
BEGIN; CREATE TABLE mytable (ID_col integer); COMMIT; BEGIN; INSERT into FOO VALUES (1); COMMIT;Aurora DSQL 不支援下列交易,因為其中包含
CREATE和INSERT兩種陳述式。BEGIN; CREATE TABLE FOO (ID_col integer); INSERT into FOO VALUES (1); COMMIT; - 非同步 DDL
-
在標準 PostgreSQL 中,DDL 操作 (例如
CREATE INDEX鎖定受影響的資料表) 會導致其他工作階段無法讀取和寫入。在 Aurora DSQL 中,這些 DDL 陳述式會使用背景管理員以非同步方式執行。因此不會封鎖存取受影響的資料表。也就是說,大型資料表上的 DDL 可在不造成停機或影響效能的情況下執行。如需 Aurora DSQL 非同步作業管理員的詳細資訊,請參閱 Aurora DSQL 的非同步索引。