

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

# 從 PostgreSQL 遷移至 Aurora DSQL
<a name="working-with-postgresql-compatibility-migration-guide"></a>

Aurora DSQL 設計為[與 PostgreSQL ](working-with-postgresql-compatibility.md)相容，支援核心關聯式功能，例如 ACID 交易、次要索引、聯結和標準 DML 操作。大多數現有的 PostgreSQL 應用程式都可以遷移至 Aurora DSQL，且變更最少。

本節提供將應用程式遷移至 Aurora DSQL 的實際指導，包括架構相容性、遷移模式和架構考量。

## 架構和 ORM 相容性
<a name="dsql-framework-compatibility"></a>

 Aurora DSQL 使用標準 PostgreSQL 線路通訊協定，確保與 PostgreSQL 驅動程式和架構相容。最熱門ORMs 可與 Aurora DSQL 搭配使用，且變更最少或完全不變更。如需參考實作和可用的 ORM 整合[Aurora DSQL 轉接器和方言](aws-sdks.md#aurora-dsql-adapters)，請參閱 。

## 常見的遷移模式
<a name="working-with-postgresql-compatibility-migration-considerations"></a>

 從 PostgreSQL 遷移到 Aurora DSQL 時，某些功能的運作方式不同，或有其他語法。本節提供常見遷移案例的指引。

### DDL 操作替代方案
<a name="dsql-ddl-alternatives"></a>

Aurora DSQL 提供傳統 PostgreSQL DDL 操作的現代替代方案：

**建立索引**  
使用 `CREATE INDEX ASYNC`而非 `CREATE INDEX` 建立非封鎖索引。  
**優點：**在大型資料表上建立零停機時間索引。

**資料移除**  
使用 `DELETE FROM table_name`而非 `TRUNCATE`。  
**替代方案：**若要完成資料表重新建立，請使用 `DROP TABLE`，後面接著 `CREATE TABLE`。

**系統組態**  
Aurora DSQL 是全受管的，因此會根據工作負載模式自動處理組態。使用 AWS 管理主控台或 API 來管理叢集設定。  
**優點：**不需要進行資料庫調校或參數管理。

### 結構描述設計模式
<a name="dsql-schema-design-patterns"></a>

為 Aurora DSQL 相容性調整這些常見的 PostgreSQL 模式：

**參考完整性模式**  
Aurora DSQL 支援資料表關係和`JOIN`操作。如需參考完整性，請在應用程式層中實作驗證。此設計符合現代分散式資料庫模式，其中應用程式層驗證提供更多彈性，並避免層疊操作造成效能瓶頸。  
**模式：**使用一致的命名慣例、驗證邏輯和交易界限，在您的應用程式層中實作參考完整性檢查。許多大規模應用程式偏好這種方法來更好地控制錯誤處理和效能。

**暫時資料處理**  
使用具有清除邏輯CTEs、子查詢或一般資料表，而非暫存資料表。  
**替代方案：**建立具有工作階段特定名稱的資料表，並在應用程式中清除它們。

## 了解架構差異
<a name="working-with-postgresql-compatibility-architectural-differences"></a>

Aurora DSQL 的分散式無伺服器架構刻意在數個區域與傳統 PostgreSQL 不同。這些差異可實現 Aurora DSQL 簡化和擴展的主要優勢。

### 簡化的資料庫模型
<a name="dsql-simplified-database-model"></a>

**每個叢集的單一資料庫**  
Aurora DSQL `postgres`為每個叢集提供一個名為 的內建資料庫。  
**遷移秘訣：**如果您的應用程式使用多個資料庫，請建立個別的 Aurora DSQL 叢集進行邏輯分離，或在單一叢集中使用結構描述。

**沒有暫存資料表**  
 對於臨時資料處理，您應該使用通用資料表表達式 (CTEs) 和子查詢，為複雜的查詢提供靈活的替代方案。  
 **替代方案：**將 CTEs與臨時結果集的 `WITH`子句搭配使用，或使用工作階段特定資料的唯一命名規則資料表。

**自動儲存管理**  
Aurora DSQL 消除了資料表空間和手動儲存管理。儲存會根據您的資料模式自動擴展和最佳化。  
**優點：**不需要監控磁碟空間、規劃儲存配置或管理資料表空間組態。

### 現代應用程式模式
<a name="dsql-modern-application-patterns"></a>

Aurora DSQL 鼓勵現代應用程式開發模式，以改善可維護性和效能：

**應用程式層級邏輯而非資料庫觸發**  
如需類似觸發的功能，請在應用程式層中實作事件驅動型邏輯。  
**遷移策略：**將觸發邏輯移至應用程式程式碼、搭配 EventBridge 等 AWS 服務使用事件驅動型架構，或使用應用程式記錄實作稽核線索。

**用於資料處理的 SQL 函數**  
Aurora DSQL 支援以 SQL 為基礎的函數，但不支援程序語言，例如 PL/pgSQL。  
**替代方案：**使用 SQL 函數進行資料轉換，或將複雜的邏輯移至您的應用程式層或 AWS Lambda 函數。

**樂觀並行控制，而不是冪等鎖定**  
Aurora DSQL 使用樂觀並行控制 (OCC)，這是一種與傳統資料庫鎖定機制不同的無鎖定方法。Aurora DSQL 不會取得封鎖其他交易的鎖定，而是允許交易繼續進行，而不會封鎖和偵測遞交時的衝突。這可消除死結，並防止慢速交易封鎖其他操作。  
**關鍵差異：**發生衝突時，Aurora DSQL 會傳回序列化錯誤，而不是讓交易等待鎖定。這需要應用程式實作重試邏輯，類似於處理傳統資料庫中的鎖定逾時，但衝突會立即解決，而不是導致封鎖等待。  
**設計模式：**使用重試機制實作等冪交易邏輯。設計結構描述，透過使用隨機主索引鍵並將更新分散到您的索引鍵範圍，將爭用降至最低。如需詳細資訊，請參閱[Aurora DSQL 的並行控制](working-with-concurrency-control.md)。

### 操作簡化
<a name="dsql-operational-simplifications"></a>

Aurora DSQL 可消除許多傳統資料庫維護任務，減少營運開銷：

**不需要手動維護**  
Aurora DSQL 會自動管理儲存最佳化、統計資料收集和效能調校。這類傳統維護命令由系統`VACUUM`處理。  
**優點：**無需進行資料庫維護時段、清空排程和系統參數調校。

**自動分割和擴展**  
Aurora DSQL 會根據存取模式自動分割和分配您的資料。使用 UUIDs或應用程式產生的 IDs以獲得最佳分佈。  
**遷移秘訣：**移除手動分割邏輯，並讓 Aurora DSQL 處理資料分佈。使用 UUIDs或應用程式產生的 IDs以獲得最佳分佈。如果您的應用程式需要循序識別符，請參閱 [序列和身分資料欄](sequences-identity-columns.md)。

## Aurora DSQL 的 PostgreSQL 相容性考量
<a name="working-with-postgresql-compatibility-unsupported-limitations"></a>

Aurora DSQL 具有與自我管理 PostgreSQL 不同的功能，可啟用其分散式架構、無伺服器操作和自動擴展。大多數應用程式會在這些差異中運作，無需修改。

如需一般考量，請參閱 [使用 Amazon Aurora DSQL 的考量事項](considerations.md)。如需了解配額和限制，請參閱 [Amazon Aurora DSQL 中的叢集配額與資料庫限制](CHAP_quotas.md)。
+ Aurora DSQL `postgres`使用每個叢集名為 的單一內建資料庫。若要進行邏輯分離，請建立個別的 Aurora DSQL 叢集，或在單一叢集中使用結構描述。
+ `postgres` 資料庫使用 UTF-8 字元編碼，可提供廣泛的國際字元支援。
+ 資料庫只會使用 `C` 定序。
+ Aurora DSQL 以 `UTC` 作為系統時區。Postgres 會將所有時區感知日期和時間儲存在 UTC 內部。您可以設定`TimeZone`組態參數，將組態參數轉換為用戶端的顯示方式，並做為伺服器將用來在內部轉換為 UTC 的用戶端輸入預設值。
+ 交易隔離層級固定為 PostgreSQL `Repeatable Read`。
+ 交易有下列限制：
  + DDL 和 DML 操作需要個別的交易
  + 交易只能包含 1 個 DDL 陳述式
  + 無論次要索引的數量為何，交易最多可以修改 3,000 個資料列
  + 3,000 個資料列的限制適用於所有 DML 陳述式 (`INSERT`、`UPDATE`、`DELETE`)
+ 資料庫連線會在 1 小時後逾時。
+ Aurora DSQL 透過結構描述層級授予來管理許可。管理員使用者使用 建立結構描述`CREATE SCHEMA`，並使用 授予存取權`GRANT USAGE ON SCHEMA`。管理員使用者管理公有結構描述中的物件，而非管理員使用者則在使用者建立的結構描述中建立物件，以實現明確的擁有權界限。如需詳細資訊，請參閱[授權資料庫角色在您的資料庫使用 SQL](using-database-and-iam-roles.md#using-database-and-iam-roles-custom-database-roles-sql)。

## 需要遷移的協助嗎？
<a name="dsql-migration-feedback-link"></a>

如果您遇到對遷移至關重要但 Aurora DSQL 目前不支援的功能，請參閱 以了解如何與 AWS 共用意見回饋[提供有關 Amazon Aurora DSQL 的意見回饋](providing-feedback.md)的相關資訊。