共用方式為


從 PostgreSQL 線上移轉至適用於 PostgreSQL 的 Azure 資料庫的已知問題與限制

重要

建議您在 適用於 PostgreSQL 的 Azure 資料庫中使用新的移轉服務 ,以取得更簡化且更有效率的移轉體驗。 此服務透過支援多個來源環境來簡化流程,確保輕鬆過渡到 Azure Database for PostgreSQL。

本文說明使用 Azure 資料庫移夕服務 (DMS) 從 PostgreSQL 線上移轉至適用於 PostgreSQL 的 Azure 資料庫的已知問題與限制。

線上移轉組態

  • 支援的最低 PostgreSQL 來源 版本是 9.4,支援的最高 目標 版本是 14.9。

  • 只支援移轉至相同或更高的版本。 例如,支援將 PostgreSQL 9.5 移轉至適用於 PostgreSQL 9.6 或 10 的 Azure 資料庫。 但不支援從 PostgreSQL 11 移轉至 PostgreSQL 9.6。

  • 若要在 來源 PostgreSQL postgresql.conf 檔案中啟用邏輯複寫,請設定下列參數:

    參數 描述
    wal_level 設定為邏輯。
    max_replication_slots 至少要設定移轉的資料庫數目上限。 如果您想移轉四個資料庫,請將值設定為至少 4
    max_wal_senders 設定同時執行的資料庫數量。 建議值是 10
  • 將 DMS 代理程式 IP 新增到來源 PostgresSQL pg_hba.conf

    1. 完成 Azure 資料庫移轉服務執行個體的佈建之後,請記下 DMS IP 位址。

    2. 新增 IP 位址到 pg_hba.conf 檔案:

      host    all    172.16.136.18/10    md5
      host    replication postgres    172.16.136.18/10     md5
      
  • 使用者在裝載來源資料庫的伺服器上必須具有「複寫」角色。

  • 來源和目標資料庫結構描述必須相符。

大小限制

  • 您可以使用單一 DMS 服務,將最多 1 TB 的資料從 PostgreSQL 移轉至適用於 PostgreSQL 的 Azure 資料庫。
  • DMS 可讓使用者在想要移轉的資料庫內挑選資料表。

DMS 畫面的螢幕快照,其中顯示選擇數據表的選項。

在幕後,pg_dump 命令會使用下列其中一個選項來傾印選取的資料表:

  • -T 以包含 UI 中挑選的資料表名稱
  • -t 以排除使用者未挑選的資料表名稱

pg_dump-t-T 選項之後,可以包含 7,500 個字元上限,以作為命令的一部分。 pg_dump 命令會針對選取或未選取的資料表使用字元計數,以較低者為準。 如果所選和未選取資料表的字元計數超過 7,500,則 pg_dump 命令會失敗並出現錯誤。

在上述範例中,pg_dump 命令會是:

pg_dump -h hostname -u username -d databasename -T "\"public\".\"table_1\"" -T "\"public\".\"table_2\""

在上一個命令中,字元數為 55 (包含雙引號、空格、-T 和斜線)

資料類型限制

限制:如果數據表上沒有主鍵,變更可能不會同步至目標資料庫。

因應措施:暫時設定數據表的主鍵以供移轉繼續。 在資料移轉完成之後,移除主索引鍵。

從 AWS RDS PostgreSQL 線上移轉的限制

當您嘗試執行從 Amazon Web Service (AWS) 關聯式資料庫 (RDS) PostgreSQL 至適用於 PostgreSQL 的 Azure 資料庫的線上移轉時,可能會遇到下列錯誤:

  • 錯誤:資料庫 '{database}' 資料表 '{table}' 中數據行 '{column}' 的預設值在來源和目標伺服器上不同。 來源上為 '{value on source}',而目標上為 '{value on target}'。

    限制:當來源資料庫與目標資料庫之間的欄位架構預設值不同時,就會發生此錯誤。

    因應措施:確定目標上的架構符合來源上的架構。 如需移轉架構的詳細資訊,請參閱 適用於 PostgreSQL 的 Azure 資料庫在線移轉檔

  • 錯誤:目標資料庫 '{database}' 有 '{number of tables}' 數據表,而源資料庫 '{database}' 有 '{number of tables}' 數據表。 來源和目標資料庫上的資料表數目應相符。

    限制:當來源和目標資料庫之間的數據表數目不同時,就會發生此錯誤。

    因應措施:確定目標上的架構符合來源上的架構。 如需移轉架構的詳細資訊,請參閱 適用於 PostgreSQL 的 Azure 資料庫在線移轉檔

  • 錯誤: 源資料庫 {database} 是空的。

    限制:當源資料庫是空的時,就會發生此錯誤。 您可能選取錯誤的資料庫作為來源。

    因應措施:請仔細檢查您為移轉選取的源資料庫,然後再試一次。

  • 錯誤: 目標資料庫 {database} 是空的。 移轉結構描述。

    限制:當目標資料庫沒有架構時,就會發生此錯誤。 請確定來源上的結構描述與目標上的結構描述相符。

    因應措施:確定目標上的架構符合來源上的架構。 如需移轉架構的詳細資訊,請參閱 適用於 PostgreSQL 的 Azure 資料庫在線移轉檔

其他限制

  • 資料庫名稱不能包含分號 (;)。

  • 擷取的資料表都必須有主索引鍵。 如果資料表沒有主索引鍵,DELETE 和 UPDATE 記錄作業的結果將無法預測。

  • 會忽略主索引鍵區段的更新。 目標會將套用這類更新識別為不更新任何資料列的更新。 結果是寫入例外資料表的記錄。

  • 如果資料表有 JSON 資料欄,此資料表上的任何 DELETE 或 UPDATE 作業都可能導致移轉失敗。

  • 使用相同名稱移轉多個資料表,但不同的大小寫可能會導致無法預期的行為,且不受支援。 例如,使用 table1、TABLE1 和 Table1。

  • 不支援變更處理 [CREATE |ALTER |DROP | TRUNCATE] 資料表 DDL。

  • 在資料庫移轉服務中,單一移轉活動只能容納最多四個資料庫。

  • 不支援移轉 pg_largeobject 資料表。