設定來源 PostgreSQL 資料庫,以便持續遷移

本頁面說明如何設定來源資料庫執行個體,以便進行標準同質 PostgreSQL 遷移作業。如要使用快速遷移功能,請按照「 使用快速遷移功能」指南操作。快速啟動遷移功能提供簡化的遷移流程,使用 pgnative 複製功能和以 Private Service Connect 介面為基礎的專用連線。詳情請參閱資料庫遷移服務主要說明文件中的「 關於快速遷移」。

這個頁面包含每個支援來源的專區:

設定自行管理的 PostgreSQL 來源

如要為遷移程序設定自行管理的 PostgreSQL 來源執行個體 (地端部署或託管於 Compute Engine VM),請按照下列指示操作:

  1. 如果是自行管理的 PostgreSQL 來源,資料庫遷移服務會遷移來源執行個體下的所有資料庫,但不包括範本資料庫 template0 和 template1。
  2. 確認來源執行個體包含預設的 postgres 資料庫。如果這個資料庫不存在,請先建立資料庫,再設定遷移作業。
  3. 在 pg_hba.conf 檔案中設定網路用戶端驗證。新增項目,允許從目的地 Cloud SQL 傳出 IP 位址、虛擬私有雲 CIDR 範圍或反向 SSH 堡壘主機進行複製連線和資料庫存取:
    # Allow replication connections
    host  replication  MIGRATION_USER_ACCOUNT_NAME  DESTINATION_IP_OR_CIDR  md5
    # Allow database access
    host  all          MIGRATION_USER_ACCOUNT_NAME  DESTINATION_IP_OR_CIDR  md5

    重新載入 PostgreSQL 設定,套用 pg_hba.conf 規則:

    SELECT pg_reload_conf();
  4. 確認來源資料庫上安裝的 PostgreSQL 擴充功能。資料庫遷移服務不會遷移 Cloud SQL 不支援的擴充功能。確認來源資料庫物件和應用程式查詢未參照不支援的擴充功能。 請先從來源資料庫中移除不支援的擴充功能和參照,再繼續操作。

    資料庫遷移服務不會自動遷移 pg_cron 擴充功能,但 PostgreSQL 適用的 Cloud SQL 目的地支援這項功能。如果您在來源資料庫中使用 pg_cron,請在升級遷移作業後,在目的地執行個體上重新安裝及設定。

  5. 在來源執行個體建立專用的遷移使用者帳戶,並授予必要權限:
    1. 使用管理員帳戶連線至來源執行個體、建立使用者,並指派複製角色:
      CREATE USER MIGRATION_USER_ACCOUNT_NAME WITH PASSWORD 'PASSWORD';
      ALTER USER MIGRATION_USER_ACCOUNT_NAME WITH REPLICATION;
    2. 請授予遷移使用者帳戶預設 postgres 資料庫和要遷移的每個資料庫所需的權限。針對每個結構定義 (資訊結構定義和開頭為 pg_ 的結構定義除外),在各個資料庫執行下列指令:
      GRANT USAGE ON SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT USAGE ON SCHEMA pglogical TO PUBLIC;
      GRANT SELECT ON ALL TABLES IN SCHEMA pglogical TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT SELECT ON ALL SEQUENCES IN SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
  6. 在要遷移的每個資料庫 (不含 template0 和 template1) 安裝 pglogical 擴充功能:
    • PostgreSQL 9.4 版:執行下列指令:
      CREATE EXTENSION IF NOT EXISTS pglogical;
      CREATE EXTENSION IF NOT EXISTS pglogical_origin;
    • PostgreSQL 9.5 以上版本:執行下列指令:
      CREATE EXTENSION IF NOT EXISTS pglogical;
  7. 確認資料表有主鍵。如要持續遷移,PostgreSQL 邏輯複製功能需要資料表具有主鍵,才能在變更資料擷取 (CDC) 階段複製 UPDATE 和 DELETE 作業:
    • 具有主鍵的資料表會自動複製所有 INSERT、UPDATE 和 DELETE 作業。
    • 如果資料表沒有主鍵,資料庫遷移服務在 CDC 階段只支援遷移初始快照和後續的 INSERT 陳述式。您必須手動遷移 UPDATE 和 DELETE 陳述式。

      建議您先為沒有主鍵的資料表新增主鍵,再開始遷移。如要瞭解如何產生查詢,列出 PostgreSQL 資料庫中沒有主鍵的資料表,或如何手動遷移 UPDATE 和 DELETE 作業,請參閱 偵錯和其他工具。

      或者,您也可以嘗試使用快速啟動遷移流程:簡化的遷移情境,可讓您使用 REPLICA IDENTITY 遷移沒有主鍵的資料表。詳情請參閱 使用快速遷移功能指南。

  8. 執行 PostgreSQL 9.5 以下版本的來源: 如果來源執行個體執行的 PostgreSQL 版本低於 9.6,則無法使用複製延遲指標。如要使用這項指標追蹤遷移進度,請參閱「 啟用複製延遲」。
  9. 安裝 pglogical 套件,並在 PostgreSQL 伺服器上設定 WAL 和複製參數:
    1. 在資料庫伺服器主機作業系統上安裝 pglogical 套件。如需發行版本的套件和安裝操作說明,請參閱 pglogical GitHub 存放區。
    2. 使用管理帳戶連線至 PostgreSQL 執行個體,並設定下列參數:
      1. 將 shared_preload_libraries 設為包含 'pglogical':
        ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
      2. 將 wal_level 設為 'logical':
        ALTER SYSTEM SET wal_level = 'logical';

        請參閱 PostgreSQL 說明文件中的 wal_level。

      3. 將 wal_sender_timeout 設為 0:
        ALTER SYSTEM SET wal_sender_timeout = 0;

        0 值會停用逾時機制,終止閒置的複製連線。請參閱「wal_sender_timeout」。

      4. 將 max_replication_slots 設為至少等於要遷移的資料庫數量乘以遷移工作數量,再加上資料表同步處理的保留量:

        舉例來說,如果來源執行個體上有 5 個資料庫,而您為該來源建立了 2 項遷移工作,則複製槽數量至少須為 5 * 2 = 10,再加上來源上其他工作已使用的複製槽數量。如果您打算使用調整後的資料轉儲平行處理設定,請務必增加複製槽數量,並在建立遷移工作時 執行遷移工作測試,驗證設定。

        ALTER SYSTEM SET max_replication_slots = MAX_REPLICATION_SLOTS;

        這個參數的預設值為 10。請參閱 max_replication_slots。

      5. 將 max_wal_senders 設為至少 max_replication_slots 的值,加上執行個體已使用的傳送者數量:

        舉例來說,如果 max_replication_slots 參數設為 10,且您已使用 2 個傳送者,則同時執行的 WAL 傳送者程序數量為 10 + 2 = 12。如果您打算使用調整後的資料轉儲平行處理設定,請務必增加傳送者數量,並在建立遷移工作時 執行遷移工作測試,驗證設定。

        ALTER SYSTEM SET max_wal_senders = MAX_WAL_SENDERS;

        這個參數的預設值為 10。請參閱 max_wal_senders。

      6. 將 max_worker_processes 設為至少要遷移的資料庫數量,加上執行個體上現有的 worker 程序。如果您打算使用調整後的資料轉儲平行處理設定,請為每個連線額外考量兩個 worker 程序 (最多 20 個 worker):
        ALTER SYSTEM SET max_worker_processes = MAX_WORKER_PROCESSES;

        這個參數的預設值為 8。請參閱 max_worker_processes。

  10. 重新啟動 PostgreSQL 伺服器,讓設定變更生效。

設定 Amazon RDS for PostgreSQL 來源

如要為遷移程序設定 Amazon RDS for PostgreSQL 來源執行個體,請按照下列步驟操作:

  1. 如果是 Amazon RDS for PostgreSQL 來源,資料庫遷移服務會遷移來源執行個體下的所有資料庫,但「不包括」範本資料庫 template0、template1 和 AWS 內部資料庫 rdsadmin。
  2. 確認來源執行個體包含預設的 postgres 資料庫。如果這個資料庫不存在,請先建立資料庫,再設定遷移作業。
  3. 設定 Amazon RDS 虛擬私有雲安全性群組傳入規則。 允許來自目的地 Cloud SQL 傳出 IP 位址、虛擬私有雲 CIDR 範圍或反向 SSH 堡壘主機 VM 的通訊埠 5432 傳入 TCP 連線。
  4. 確認來源資料庫上安裝的 PostgreSQL 擴充功能。資料庫遷移服務不會遷移 Cloud SQL 不支援的擴充功能。確認來源資料庫物件和應用程式查詢未參照不支援的擴充功能。 請先從來源資料庫中移除不支援的擴充功能和參照,再繼續操作。

    資料庫遷移服務不會自動遷移 pg_cron 擴充功能,但 PostgreSQL 適用的 Cloud SQL 目的地支援這項功能。如果您在來源資料庫中使用 pg_cron,請在升級遷移作業後,在目的地執行個體上重新安裝及設定。

  5. 在來源執行個體建立專用的遷移使用者帳戶,並授予必要權限:
    1. 使用管理員帳戶連線至來源執行個體、建立使用者,並授予 AWS 代管的 rds_replication 角色:
      CREATE USER MIGRATION_USER_ACCOUNT_NAME WITH PASSWORD 'PASSWORD';
      GRANT rds_replication TO "MIGRATION_USER_ACCOUNT_NAME";
    2. 請授予遷移使用者帳戶預設 postgres 資料庫和要遷移的每個資料庫所需的權限。針對每個結構定義 (資訊結構定義和開頭為 pg_ 的結構定義除外),在各個資料庫執行下列指令:
      GRANT USAGE ON SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT USAGE ON SCHEMA pglogical TO PUBLIC;
      GRANT SELECT ON ALL TABLES IN SCHEMA pglogical TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT SELECT ON ALL SEQUENCES IN SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
  6. 在要遷移的每個資料庫上安裝 pglogical 擴充功能,但不包括 template0、template1 和 rdsadmin:
    • PostgreSQL 9.4 版:執行下列指令:
      CREATE EXTENSION IF NOT EXISTS pglogical;
      CREATE EXTENSION IF NOT EXISTS pglogical_origin;
    • PostgreSQL 9.5 以上版本:執行下列指令:
      CREATE EXTENSION IF NOT EXISTS pglogical;

    如要進一步瞭解相關規定,請參閱 AWS 說明文件中的「 搭配使用 PostgreSQL 擴充功能與 Amazon RDS for PostgreSQL」。

  7. 確認資料表有主鍵。如要持續遷移,PostgreSQL 邏輯複製功能需要資料表具有主鍵,才能在變更資料擷取 (CDC) 階段複製 UPDATE 和 DELETE 作業:
    • 具有主鍵的資料表會自動複製所有 INSERT、UPDATE 和 DELETE 作業。
    • 如果資料表沒有主鍵,資料庫遷移服務在 CDC 階段只支援遷移初始快照和後續的 INSERT 陳述式。您必須手動遷移 UPDATE 和 DELETE 陳述式。

      建議您先為沒有主鍵的資料表新增主鍵,再開始遷移。如要瞭解如何產生查詢,列出 PostgreSQL 資料庫中沒有主鍵的資料表,或如何手動遷移 UPDATE 和 DELETE 作業,請參閱 偵錯和其他工具。

      或者,您也可以嘗試使用快速啟動遷移流程:簡化的遷移情境,可讓您使用 REPLICA IDENTITY 遷移沒有主鍵的資料表。詳情請參閱 使用快速遷移功能指南。

  8. 執行 PostgreSQL 9.5 以下版本的來源: 如果來源執行個體執行的 PostgreSQL 版本低於 9.6,則無法使用複製延遲指標。如要使用這項指標追蹤遷移進度,請參閱「 啟用複製延遲」。
  9. 設定自訂資料庫參數群組,並附加至執行個體:
    1. 建立自訂參數群組 (請參閱 AWS 說明文件中的「 使用資料庫參數群組」),並設定下列參數:
      1. 將 shared_preload_libraries 設為包含 pglogical。
      2. 將 rds.logical_replication 設為 1。這項參數會在 Amazon RDS 中啟用邏輯 WAL 記錄功能。 請參閱「Amazon RDS for PostgreSQL 的邏輯複製」。
      3. 將 wal_sender_timeout 設為 0。0 值會停用逾時機制,終止閒置的複製連線。
      4. 將 max_replication_slots 設為至少等於要遷移的資料庫數量乘以遷移工作數量,再加上資料表同步處理的保留量:

        舉例來說,如果來源執行個體上有 5 個資料庫,而您為該來源建立了 2 項遷移工作,則複製槽數量至少須為 5 * 2 = 10,再加上來源上其他工作已使用的複製槽數量。如果您打算使用調整後的資料轉儲平行處理設定,請務必增加複製槽數量,並在建立遷移工作時 執行遷移工作測試,驗證設定。

        這個參數的預設值為 10。

      5. 將 max_wal_senders 設為至少 max_replication_slots 的值,加上執行個體已使用的傳送者數量:

        舉例來說,如果 max_replication_slots 參數設為 10,且您已使用 2 個傳送者,則同時執行的 WAL 傳送者程序數量會是 10 + 2 = 12。如果您打算使用調整後的資料轉儲平行處理設定,請務必增加傳送者數量,並在建立遷移工作時 執行遷移工作測試,驗證設定。

        這個參數的預設值為 10。

      6. 將 max_worker_processes 設為至少要遷移的資料庫數量,加上執行個體上現有的 worker 程序。如果您打算使用調整後的資料轉儲平行處理設定,請為每個連線額外考量兩個 worker 程序 (最多 20 個 worker):

        這個參數的預設值為 8。

    2. 將參數群組附加至 RDS 資料庫執行個體。如要建立新的執行個體,請在「Additional Configuration」(其他設定) 下方找到這個選項。否則,請修改執行個體,附加參數群組。
  10. 重新啟動 Amazon RDS 執行個體,讓參數群組變更生效。

設定 Amazon Aurora for PostgreSQL 來源

如要為遷移程序設定 Amazon Aurora PostgreSQL 來源叢集,請按照下列步驟操作:

  1. 如果是 Amazon Aurora for PostgreSQL 來源,資料庫遷移服務會遷移來源叢集下的所有資料庫,但範本資料庫 template0、template1 和 AWS 內部資料庫 rdsadmin 除外。
  2. 確認來源叢集包含預設的 postgres 資料庫。如果這個資料庫不存在,請先建立資料庫,再設定遷移作業。
  3. 設定 Amazon Aurora 叢集虛擬私有雲安全性群組的傳入規則。 允許來自目的地 Cloud SQL 傳出 IP 位址、虛擬私有雲 CIDR 範圍或反向 SSH 堡壘主機 VM 的傳入 TCP 連線,並使用通訊埠 5432。
  4. 確認來源資料庫上安裝的 PostgreSQL 擴充功能。資料庫遷移服務不會遷移 Cloud SQL 不支援的擴充功能。確認來源資料庫物件和應用程式查詢未參照不支援的擴充功能。 請先從來源資料庫中移除不支援的擴充功能和參照,再繼續操作。

    資料庫遷移服務不會自動遷移 pg_cron 擴充功能,但 PostgreSQL 適用的 Cloud SQL 目的地支援這項功能。如果您在來源資料庫中使用 pg_cron,請在升級遷移作業後,在目的地執行個體上重新安裝及設定。

  5. 在來源叢集建立專用的遷移使用者帳戶,並授予必要權限:
    1. 使用管理員帳戶連線至來源叢集、建立使用者,並授予 AWS 代管的 rds_replication 角色:
      CREATE USER MIGRATION_USER_ACCOUNT_NAME WITH PASSWORD 'PASSWORD';
      GRANT rds_replication TO "MIGRATION_USER_ACCOUNT_NAME";
    2. 請授予遷移使用者帳戶預設 postgres 資料庫和要遷移的每個資料庫所需的權限。針對每個結構定義 (資訊結構定義和開頭為 pg_ 的結構定義除外),在各個資料庫執行下列指令:
      GRANT USAGE ON SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT USAGE ON SCHEMA pglogical TO PUBLIC;
      GRANT SELECT ON ALL TABLES IN SCHEMA pglogical TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT SELECT ON ALL SEQUENCES IN SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
  6. 在要遷移的每個資料庫上安裝 pglogical 擴充功能,但不包括 template0、template1 和 rdsadmin:
    CREATE EXTENSION IF NOT EXISTS pglogical;
  7. 確認資料表有主鍵。如要持續遷移,PostgreSQL 邏輯複製功能需要資料表具有主鍵,才能在變更資料擷取 (CDC) 階段複製 UPDATE 和 DELETE 作業:
    • 具有主鍵的資料表會自動複製所有 INSERT、UPDATE 和 DELETE 作業。
    • 如果資料表沒有主鍵,資料庫遷移服務在 CDC 階段只支援遷移初始快照和後續的 INSERT 陳述式。您必須手動遷移 UPDATE 和 DELETE 陳述式。

      建議您先為沒有主鍵的資料表新增主鍵,再開始遷移。如要瞭解如何產生查詢,列出 PostgreSQL 資料庫中沒有主鍵的資料表,或如何手動遷移 UPDATE 和 DELETE 作業,請參閱 偵錯和其他工具。

      或者,您也可以嘗試使用快速啟動遷移流程:簡化的遷移情境,可讓您使用 REPLICA IDENTITY 遷移沒有主鍵的資料表。詳情請參閱 使用快速遷移功能指南。

  8. 設定自訂資料庫叢集參數群組,並附加至叢集:
    1. 建立自訂資料庫叢集參數群組,並設定下列參數:
      1. 將 shared_preload_libraries 設為包含 pglogical。
      2. 將 rds.logical_replication 設為 1。這個參數可啟用邏輯 WAL 記錄功能。
      3. 將 wal_sender_timeout 設為 0。0 值會停用逾時機制,終止閒置的複製連線。
      4. 將 max_replication_slots 設為至少等於要遷移的資料庫數量乘以遷移工作數量,再加上資料表同步處理的保留量:

        舉例來說,如果來源執行個體上有 5 個資料庫,而您為該來源建立了 2 項遷移工作,則複製槽數量至少須為 5 * 2 = 10,再加上來源上其他工作已使用的複製槽數量。如果您打算使用調整後的資料轉儲平行處理設定,請務必增加複製槽數量,並在建立遷移工作時 執行遷移工作測試,驗證設定。

        這個參數的預設值為 10。

      5. 將 max_wal_senders 設為至少 max_replication_slots 的值,加上執行個體已使用的傳送者數量:

        舉例來說,如果 max_replication_slots 參數設為 10,且您已使用 2 個傳送者,則同時執行的 WAL 傳送者程序數量為 10 + 2 = 12。如果您打算使用調整後的資料轉儲平行處理設定,請務必增加傳送者數量,並在建立遷移工作時 執行遷移工作測試,驗證設定。

        這個參數的預設值為 10。

      6. 將 max_worker_processes 設為至少要遷移的資料庫數量,加上執行個體上現有的 worker 程序。如果您打算使用調整後的資料轉儲平行處理設定,請為每個連線額外考量兩個 worker 程序 (最多 20 個 worker):

        這個參數的預設值為 8。

    2. 將資料庫叢集參數群組附加至 Aurora 資料庫叢集。
  9. 重新啟動 Amazon Aurora 資料庫叢集,讓參數群組變更生效。

設定 Microsoft Azure Database for PostgreSQL 彈性伺服器來源

如要為遷移程序設定 Microsoft Azure Database for PostgreSQL Flexible Server 來源執行個體,請按照下列步驟操作:

  1. 如果是 Microsoft Azure Database for PostgreSQL 彈性伺服器來源,資料庫遷移服務會遷移來源執行個體下的所有資料庫,但不包括 Azure 系統和範本資料庫:azure_maintenance、azure_sys、template0 和 template1。
  2. 確認來源執行個體包含預設的 postgres 資料庫。如果這個資料庫不存在,請先建立資料庫,再設定遷移作業。
  3. 設定 Azure 防火牆和 SSL/TLS 設定:
    1. 在 Azure 網路設定中,新增防火牆規則,允許來自目的地 Cloud SQL 傳出 IP 位址、虛擬私有雲 CIDR 範圍或反向 SSH 堡壘主機 VM 的通訊埠 5432 傳入 TCP 連線。
    2. 檢查 require_secure_transport 伺服器參數的值。 根據預設,Azure 資料庫會要求傳入連線使用 SSL/TLS 加密。視 require_secure_transport 設定而定,請在建立來源連線設定檔時,選取下列其中一項加密設定:
      • 如果 require_secure_transport 設為 on,請選取「Basic」、「TLS」或「mTLS」。
      • 如果 require_secure_transport 設為 off,請選取「None」。
  4. 確認來源資料庫上安裝的 PostgreSQL 擴充功能。資料庫遷移服務不會遷移 Cloud SQL 不支援的擴充功能。確認來源資料庫物件和應用程式查詢未參照不支援的擴充功能。 請先從來源資料庫中移除不支援的擴充功能和參照,再繼續操作。

    資料庫遷移服務不會自動遷移 pg_cron 擴充功能,但 PostgreSQL 適用的 Cloud SQL 目的地支援這項功能。如果您在來源資料庫中使用 pg_cron,請在升級遷移作業後,在目的地執行個體上重新安裝及設定。

  5. 在來源執行個體建立專用的遷移使用者帳戶,並授予必要權限:
    1. 使用管理員帳戶連線至來源執行個體、建立使用者,並指派複製角色:
      CREATE USER MIGRATION_USER_ACCOUNT_NAME WITH PASSWORD 'PASSWORD';
      ALTER USER MIGRATION_USER_ACCOUNT_NAME WITH REPLICATION;
    2. 請授予遷移使用者帳戶預設 postgres 資料庫和要遷移的每個資料庫所需的權限。針對每個結構定義 (資訊結構定義和開頭為 pg_ 的結構定義除外),在各個資料庫執行下列指令:
      GRANT USAGE ON SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT USAGE ON SCHEMA pglogical TO PUBLIC;
      GRANT SELECT ON ALL TABLES IN SCHEMA pglogical TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT SELECT ON ALL SEQUENCES IN SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
  6. 在要遷移的每個資料庫上安裝 pglogical 擴充功能,但不包括 azure_maintenance、azure_sys、template0 和 template1:
    • PostgreSQL 9.4 版:執行下列指令:
      CREATE EXTENSION IF NOT EXISTS pglogical;
      CREATE EXTENSION IF NOT EXISTS pglogical_origin;
    • PostgreSQL 9.5 以上版本:執行下列指令:
      CREATE EXTENSION IF NOT EXISTS pglogical;
  7. 確認資料表有主鍵。如要持續遷移,PostgreSQL 邏輯複製功能需要資料表具有主鍵,才能在變更資料擷取 (CDC) 階段複製 UPDATE 和 DELETE 作業:
    • 具有主鍵的資料表會自動複製所有 INSERT、UPDATE 和 DELETE 作業。
    • 如果資料表沒有主鍵,資料庫遷移服務在 CDC 階段只支援遷移初始快照和後續的 INSERT 陳述式。您必須手動遷移 UPDATE 和 DELETE 陳述式。

      建議您先為沒有主鍵的資料表新增主鍵,再開始遷移。如要瞭解如何產生查詢,列出 PostgreSQL 資料庫中沒有主鍵的資料表,或如何手動遷移 UPDATE 和 DELETE 作業,請參閱 偵錯和其他工具。

      或者,您也可以嘗試使用快速啟動遷移流程:簡化的遷移情境,可讓您使用 REPLICA IDENTITY 遷移沒有主鍵的資料表。詳情請參閱 使用快速遷移功能指南。

  8. 執行 PostgreSQL 9.5 以下版本的來源: 如果來源執行個體執行的 PostgreSQL 版本低於 9.6,則無法使用複製延遲指標。如要使用這項指標追蹤遷移進度,請參閱「 啟用複製延遲」。
  9. 在 Azure 中設定下列伺服器參數。詳情請參閱「在 Azure Database for PostgreSQL 中設定伺服器參數」。
    1. 將 shared_preload_libraries 設為包含 pglogical。
    2. 將 azure.extensions 設為包含 pglogical。
    3. 將 wal_level 設為 logical。
    4. 將 wal_sender_timeout 設為 0。0 值會停用逾時機制,終止閒置的複製連線。
    5. 將 max_replication_slots 設為至少等於要遷移的資料庫數量乘以遷移工作數量,再加上資料表同步處理的保留量:

      舉例來說,如果來源執行個體上有 5 個資料庫,而您為該來源建立了 2 項遷移工作,則複製槽數量必須至少為 5 * 2 = 10,再加上來源上其他工作已使用的複製槽數量。如果您打算使用調整後的資料轉儲平行處理設定,請務必增加複製槽數量,並在建立遷移工作時 執行遷移工作測試,驗證設定。

      這個參數的預設值為 10。

    6. 將 max_wal_senders 設為至少 max_replication_slots 的值,加上執行個體已使用的傳送者數量:

      舉例來說,如果 max_replication_slots 參數設為 10,且您已使用 2 個傳送者,則同時執行的 WAL 傳送者程序數量為 10 + 2 = 12。如果您打算使用調整後的資料轉儲平行處理設定,請務必增加傳送者數量,並在建立遷移工作時 執行遷移工作測試,驗證設定。

      這個參數的預設值為 10。

    7. 將 max_worker_processes 設為至少要遷移的資料庫數量,加上執行個體上現有的 worker 程序。如果您打算使用調整後的資料轉儲平行處理設定,請為每個連線額外考量兩個 worker 程序 (最多 20 個 worker):

      這個參數的預設值為 8。

    如要進一步瞭解參數,請參閱 Microsoft 說明文件中的 Azure Database for PostgreSQL 伺服器參數完整清單。

  10. 重新啟動 Microsoft Azure Database for PostgreSQL 彈性伺服器執行個體,讓伺服器參數變更生效。

設定 PostgreSQL 適用的 Cloud SQL 來源

如要為遷移程序設定 PostgreSQL 適用的 Cloud SQL 來源執行個體,請按照下列步驟操作:

  1. 如果是 PostgreSQL 適用的 Cloud SQL 來源,資料庫遷移服務會遷移來源執行個體下的所有資料庫,但範本資料庫 template0 和 template1 除外。
  2. 確認來源執行個體包含預設的 postgres 資料庫。如果這個資料庫不存在,請先建立資料庫,再設定遷移作業。
  3. 如果從設有私人 IP 位址的 Cloud SQL 來源執行個體,遷移至使用非 RFC 1918 位址 IP 範圍的 Cloud SQL 目的地執行個體,請將非 RFC 1918 範圍新增至來源執行個體的授權網路。詳情請參閱「 設定授權網路」。
  4. 確認來源資料庫上安裝的 PostgreSQL 擴充功能。資料庫遷移服務不會遷移 Cloud SQL 不支援的擴充功能。確認來源資料庫物件和應用程式查詢未參照不支援的擴充功能。請先從來源資料庫中移除不支援的擴充功能和參照,再繼續操作。

    pg_cron 擴充功能不會由資料庫遷移服務自動遷移,但 PostgreSQL 適用的 Cloud SQL 目的地支援這項功能。如果您在來源資料庫中使用 pg_cron,請在升級遷移作業後,在目的地執行個體上重新安裝及設定。

  5. 在來源執行個體建立專用的遷移使用者帳戶,並授予必要權限:
    1. 請按照 Cloud SQL 說明文件「 建立使用者」頁面中的步驟操作。
    2. 請授予遷移使用者帳戶預設 postgres 資料庫和要遷移的每個資料庫所需的權限。針對每個結構定義 (資訊結構定義和開頭為 pg_ 的結構定義除外),在每個資料庫上執行下列指令:
      GRANT USAGE ON SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT USAGE ON SCHEMA pglogical TO PUBLIC;
      GRANT SELECT ON ALL TABLES IN SCHEMA pglogical TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
      GRANT SELECT ON ALL SEQUENCES IN SCHEMA SCHEMA_NAME TO "MIGRATION_USER_ACCOUNT_NAME";
  6. 在要遷移的每個資料庫上安裝 pglogical 擴充功能,但不包括 template0 和 template1:
    • PostgreSQL 9.4 版:執行下列指令:
      CREATE EXTENSION IF NOT EXISTS pglogical;
      CREATE EXTENSION IF NOT EXISTS pglogical_origin;
    • PostgreSQL 9.5 以上版本:執行下列指令:
      CREATE EXTENSION IF NOT EXISTS pglogical;
  7. 確認資料表有主鍵。如要持續遷移,PostgreSQL 邏輯複製功能需要資料表具有主鍵,才能在變更資料擷取 (CDC) 階段複製 UPDATE 和 DELETE 作業:
    • 具有主鍵的資料表會自動複製所有 INSERT、UPDATE 和 DELETE 作業。
    • 如果資料表沒有主鍵,資料庫遷移服務會在 CDC 階段遷移初始快照和後續的 INSERT 陳述式。您必須手動遷移 UPDATE 和 DELETE 陳述式。

      建議您先為沒有主鍵的資料表新增主鍵,再開始遷移。如要瞭解如何產生查詢,列出 PostgreSQL 資料庫中沒有主鍵的資料表,或如何手動遷移 UPDATE 和 DELETE 作業,請參閱 偵錯和其他工具。

      或者,您也可以嘗試使用快速啟動遷移流程:簡化的遷移情境,可讓您使用 REPLICA IDENTITY 遷移沒有主鍵的資料表。詳情請參閱 使用快速遷移功能指南。

  8. 執行 PostgreSQL 9.5 以下版本的來源: 如果來源執行個體執行的 PostgreSQL 版本低於 9.6,則無法使用複製延遲指標。如要使用這項指標追蹤遷移進度,請參閱「 啟用複製延遲」。
  9. 在 Cloud SQL 來源執行個體上設定下列資料庫旗標:
    1. 將 cloudsql.logical_decoding 設為 on。
    2. 將 cloudsql.enable_pglogical 設為 on。
    3. 將 wal_sender_timeout 設為 0。0 值會停用終止閒置複製連線的逾時機制。
    4. 將 max_replication_slots 設為至少等於要遷移的資料庫數量乘以遷移工作數量,再加上資料表同步處理的預留量

      舉例來說,如果來源執行個體上有 5 個資料庫,而您為該來源建立 2 項遷移工作,則複製運算單元數量至少須為 5 * 2 = 10,再加上來源上其他工作已使用的複製運算單元數量。如果您打算使用調整後的資料轉儲平行處理設定,請務必增加複製槽數量,並在建立遷移工作時 執行遷移工作測試,驗證設定。

      這個旗標的預設值為 10。

    5. 將 max_wal_senders 設為至少 max_replication_slots 的值,加上執行個體已使用的傳送者數量。

      舉例來說,如果 max_replication_slots 旗標設為 10,且您已使用 2 個傳送者,則同時執行的 WAL 傳送者程序數量為 10 + 2 = 12。如果您打算使用調整後的資料轉儲平行處理設定,請務必增加傳送者數量,並在建立遷移工作時 執行遷移工作測試,驗證設定。

      這個旗標的預設值為 10。

    6. 將 max_worker_processes 設為至少要遷移的資料庫數量,加上執行個體上現有的 worker 程序。如果您打算使用調整後的資料轉儲平行處理設定,請為每個連線額外預留兩個 worker 程序 (最多 20 個 worker)。

      這個旗標的預設值為 8。

    如要進一步瞭解如何修改旗標,請參閱 Cloud SQL 說明文件中的「設定資料庫旗標」。

  10. 重新啟動來源 Cloud SQL 執行個體,讓資料庫旗標變更生效。

後續步驟