Aurora DSQL 中的 DDL 和分散式交易 - Amazon Aurora DSQL

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Aurora DSQL 中的 DDL 和分散式交易

資料定義語言 (DDL) 在來自 PostgreSQL 的 Aurora DSQL 中的行為不同。Aurora DSQL 具有以多租用戶運算和儲存機群為基礎建置的異地同步備份分散式和共用無資料庫層。由於不存在單一主要資料庫節點或領導者,因此會分佈資料庫目錄。因此,Aurora DSQL 會以分散式交易的形式管理 DDL 結構描述變更。

具體而言,DDL 在 Aurora DSQL 中的行為不同,如下所示:

並行控制錯誤

如果您在另一個交易更新資源時執行一個交易,Aurora DSQL 會傳回並行控制違規錯誤。例如,請考慮下列動作順序:

  1. 在工作階段 1 中,使用者將資料欄新增至資料表 mytable

  2. 在工作階段 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 不支援下列交易,其中包括 CREATEINSERT陳述式。

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 中的非同步索引