本頁面說明如何設定來源資料庫執行個體,以便進行標準同質 PostgreSQL 遷移作業。如要使用快速遷移功能,請按照「
使用快速遷移功能」指南操作。快速啟動遷移功能提供簡化的遷移流程,使用 pgnative 複製功能和以 Private Service Connect 介面為基礎的專用連線。詳情請參閱資料庫遷移服務主要說明文件中的「
關於快速遷移」。
這個頁面包含每個支援來源的專區:
- 自行管理的 PostgreSQL (地端部署或在 Compute Engine VM 上)
- Amazon RDS for PostgreSQL
- PostgreSQL 適用的 Amazon Aurora
- Microsoft Azure Database for PostgreSQL Flexible Server
- PostgreSQL 適用的 Cloud SQL
設定自行管理的 PostgreSQL 來源
如要為遷移程序設定自行管理的 PostgreSQL 來源執行個體 (地端部署或託管於 Compute Engine VM),請按照下列指示操作:
- 如果是自行管理的 PostgreSQL 來源,資料庫遷移服務會遷移來源執行個體下的所有資料庫,但不包括範本資料庫
template0和template1。 - 確認來源執行個體包含預設的
postgres資料庫。如果這個資料庫不存在,請先建立資料庫,再設定遷移作業。 - 在
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();
- 確認來源資料庫上安裝的 PostgreSQL 擴充功能。資料庫遷移服務不會遷移 Cloud SQL 不支援的擴充功能。確認來源資料庫物件和應用程式查詢未參照不支援的擴充功能。
請先從來源資料庫中移除不支援的擴充功能和參照,再繼續操作。
資料庫遷移服務不會自動遷移
pg_cron擴充功能,但 PostgreSQL 適用的 Cloud SQL 目的地支援這項功能。如果您在來源資料庫中使用pg_cron,請在升級遷移作業後,在目的地執行個體上重新安裝及設定。 - 在來源執行個體建立專用的遷移使用者帳戶,並授予必要權限:
- 使用管理員帳戶連線至來源執行個體、建立使用者,並指派複製角色:
CREATE USER MIGRATION_USER_ACCOUNT_NAME WITH PASSWORD 'PASSWORD'; ALTER USER MIGRATION_USER_ACCOUNT_NAME WITH REPLICATION;
- 請授予遷移使用者帳戶預設
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";
- 使用管理員帳戶連線至來源執行個體、建立使用者,並指派複製角色:
- 在要遷移的每個資料庫 (不含
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;
- PostgreSQL 9.4 版:執行下列指令:
- 確認資料表有主鍵。如要持續遷移,PostgreSQL 邏輯複製功能需要資料表具有主鍵,才能在變更資料擷取 (CDC) 階段複製
UPDATE和DELETE作業:- 具有主鍵的資料表會自動複製所有
INSERT、UPDATE和DELETE作業。 - 如果資料表沒有主鍵,資料庫遷移服務在 CDC 階段只支援遷移初始快照和後續的
INSERT陳述式。您必須手動遷移UPDATE和DELETE陳述式。建議您先為沒有主鍵的資料表新增主鍵,再開始遷移。如要瞭解如何產生查詢,列出 PostgreSQL 資料庫中沒有主鍵的資料表,或如何手動遷移
UPDATE和DELETE作業,請參閱 偵錯和其他工具。或者,您也可以嘗試使用快速啟動遷移流程:簡化的遷移情境,可讓您使用
REPLICA IDENTITY遷移沒有主鍵的資料表。詳情請參閱 使用快速遷移功能指南。
- 具有主鍵的資料表會自動複製所有
- 執行 PostgreSQL 9.5 以下版本的來源: 如果來源執行個體執行的 PostgreSQL 版本低於 9.6,則無法使用複製延遲指標。如要使用這項指標追蹤遷移進度,請參閱「 啟用複製延遲」。
- 安裝
pglogical套件,並在 PostgreSQL 伺服器上設定 WAL 和複製參數:- 在資料庫伺服器主機作業系統上安裝
pglogical套件。如需發行版本的套件和安裝操作說明,請參閱 pglogical GitHub 存放區。 - 使用管理帳戶連線至 PostgreSQL 執行個體,並設定下列參數:
- 將
shared_preload_libraries設為包含'pglogical':ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
- 將
wal_level設為'logical':ALTER SYSTEM SET wal_level = 'logical';
請參閱 PostgreSQL 說明文件中的
wal_level。 - 將
wal_sender_timeout設為0:ALTER SYSTEM SET wal_sender_timeout = 0;
0值會停用逾時機制,終止閒置的複製連線。請參閱「wal_sender_timeout」。 - 將
max_replication_slots設為至少等於要遷移的資料庫數量乘以遷移工作數量,再加上資料表同步處理的保留量:舉例來說,如果來源執行個體上有 5 個資料庫,而您為該來源建立了 2 項遷移工作,則複製槽數量至少須為 5 * 2 = 10,再加上來源上其他工作已使用的複製槽數量。如果您打算使用調整後的資料轉儲平行處理設定,請務必增加複製槽數量,並在建立遷移工作時 執行遷移工作測試,驗證設定。
ALTER SYSTEM SET max_replication_slots = MAX_REPLICATION_SLOTS;
這個參數的預設值為 10。請參閱
max_replication_slots。 - 將
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。 - 將
max_worker_processes設為至少要遷移的資料庫數量,加上執行個體上現有的 worker 程序。如果您打算使用調整後的資料轉儲平行處理設定,請為每個連線額外考量兩個 worker 程序 (最多 20 個 worker):ALTER SYSTEM SET max_worker_processes = MAX_WORKER_PROCESSES;
這個參數的預設值為 8。請參閱
max_worker_processes。
- 將
- 在資料庫伺服器主機作業系統上安裝
- 重新啟動 PostgreSQL 伺服器,讓設定變更生效。
設定 Amazon RDS for PostgreSQL 來源
如要為遷移程序設定 Amazon RDS for PostgreSQL 來源執行個體,請按照下列步驟操作:
- 如果是 Amazon RDS for PostgreSQL 來源,資料庫遷移服務會遷移來源執行個體下的所有資料庫,但「不包括」範本資料庫
template0、template1和 AWS 內部資料庫rdsadmin。 - 確認來源執行個體包含預設的
postgres資料庫。如果這個資料庫不存在,請先建立資料庫,再設定遷移作業。 - 設定 Amazon RDS 虛擬私有雲安全性群組傳入規則。
允許來自目的地 Cloud SQL 傳出 IP 位址、虛擬私有雲 CIDR 範圍或反向 SSH 堡壘主機 VM 的通訊埠
5432傳入 TCP 連線。 - 確認來源資料庫上安裝的 PostgreSQL 擴充功能。資料庫遷移服務不會遷移 Cloud SQL 不支援的擴充功能。確認來源資料庫物件和應用程式查詢未參照不支援的擴充功能。
請先從來源資料庫中移除不支援的擴充功能和參照,再繼續操作。
資料庫遷移服務不會自動遷移
pg_cron擴充功能,但 PostgreSQL 適用的 Cloud SQL 目的地支援這項功能。如果您在來源資料庫中使用pg_cron,請在升級遷移作業後,在目的地執行個體上重新安裝及設定。 - 在來源執行個體建立專用的遷移使用者帳戶,並授予必要權限:
- 使用管理員帳戶連線至來源執行個體、建立使用者,並授予 AWS 代管的
rds_replication角色:CREATE USER MIGRATION_USER_ACCOUNT_NAME WITH PASSWORD 'PASSWORD'; GRANT rds_replication TO "MIGRATION_USER_ACCOUNT_NAME";
- 請授予遷移使用者帳戶預設
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";
- 使用管理員帳戶連線至來源執行個體、建立使用者,並授予 AWS 代管的
- 在要遷移的每個資料庫上安裝
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」。
- PostgreSQL 9.4 版:執行下列指令:
- 確認資料表有主鍵。如要持續遷移,PostgreSQL 邏輯複製功能需要資料表具有主鍵,才能在變更資料擷取 (CDC) 階段複製
UPDATE和DELETE作業:- 具有主鍵的資料表會自動複製所有
INSERT、UPDATE和DELETE作業。 - 如果資料表沒有主鍵,資料庫遷移服務在 CDC 階段只支援遷移初始快照和後續的
INSERT陳述式。您必須手動遷移UPDATE和DELETE陳述式。建議您先為沒有主鍵的資料表新增主鍵,再開始遷移。如要瞭解如何產生查詢,列出 PostgreSQL 資料庫中沒有主鍵的資料表,或如何手動遷移
UPDATE和DELETE作業,請參閱 偵錯和其他工具。或者,您也可以嘗試使用快速啟動遷移流程:簡化的遷移情境,可讓您使用
REPLICA IDENTITY遷移沒有主鍵的資料表。詳情請參閱 使用快速遷移功能指南。
- 具有主鍵的資料表會自動複製所有
- 執行 PostgreSQL 9.5 以下版本的來源: 如果來源執行個體執行的 PostgreSQL 版本低於 9.6,則無法使用複製延遲指標。如要使用這項指標追蹤遷移進度,請參閱「 啟用複製延遲」。
- 設定自訂資料庫參數群組,並附加至執行個體:
- 建立自訂參數群組 (請參閱 AWS 說明文件中的「
使用資料庫參數群組」),並設定下列參數:
- 將
shared_preload_libraries設為包含pglogical。 - 將
rds.logical_replication設為1。這項參數會在 Amazon RDS 中啟用邏輯 WAL 記錄功能。 請參閱「Amazon RDS for PostgreSQL 的邏輯複製」。 - 將
wal_sender_timeout設為0。0值會停用逾時機制,終止閒置的複製連線。 - 將
max_replication_slots設為至少等於要遷移的資料庫數量乘以遷移工作數量,再加上資料表同步處理的保留量:舉例來說,如果來源執行個體上有 5 個資料庫,而您為該來源建立了 2 項遷移工作,則複製槽數量至少須為 5 * 2 = 10,再加上來源上其他工作已使用的複製槽數量。如果您打算使用調整後的資料轉儲平行處理設定,請務必增加複製槽數量,並在建立遷移工作時 執行遷移工作測試,驗證設定。
這個參數的預設值為 10。
- 將
max_wal_senders設為至少max_replication_slots的值,加上執行個體已使用的傳送者數量:舉例來說,如果
max_replication_slots參數設為10,且您已使用 2 個傳送者,則同時執行的 WAL 傳送者程序數量會是 10 + 2 = 12。如果您打算使用調整後的資料轉儲平行處理設定,請務必增加傳送者數量,並在建立遷移工作時 執行遷移工作測試,驗證設定。這個參數的預設值為 10。
- 將
max_worker_processes設為至少要遷移的資料庫數量,加上執行個體上現有的 worker 程序。如果您打算使用調整後的資料轉儲平行處理設定,請為每個連線額外考量兩個 worker 程序 (最多 20 個 worker):這個參數的預設值為 8。
- 將
- 將參數群組附加至 RDS 資料庫執行個體。如要建立新的執行個體,請在「Additional Configuration」(其他設定) 下方找到這個選項。否則,請修改執行個體,附加參數群組。
- 建立自訂參數群組 (請參閱 AWS 說明文件中的「
使用資料庫參數群組」),並設定下列參數:
- 重新啟動 Amazon RDS 執行個體,讓參數群組變更生效。
設定 Amazon Aurora for PostgreSQL 來源
如要為遷移程序設定 Amazon Aurora PostgreSQL 來源叢集,請按照下列步驟操作:
- 如果是 Amazon Aurora for PostgreSQL 來源,資料庫遷移服務會遷移來源叢集下的所有資料庫,但範本資料庫
template0、template1和 AWS 內部資料庫rdsadmin除外。 - 確認來源叢集包含預設的
postgres資料庫。如果這個資料庫不存在,請先建立資料庫,再設定遷移作業。 - 設定 Amazon Aurora 叢集虛擬私有雲安全性群組的傳入規則。
允許來自目的地 Cloud SQL 傳出 IP 位址、虛擬私有雲 CIDR 範圍或反向 SSH 堡壘主機 VM 的傳入 TCP 連線,並使用通訊埠
5432。 - 確認來源資料庫上安裝的 PostgreSQL 擴充功能。資料庫遷移服務不會遷移 Cloud SQL 不支援的擴充功能。確認來源資料庫物件和應用程式查詢未參照不支援的擴充功能。
請先從來源資料庫中移除不支援的擴充功能和參照,再繼續操作。
資料庫遷移服務不會自動遷移
pg_cron擴充功能,但 PostgreSQL 適用的 Cloud SQL 目的地支援這項功能。如果您在來源資料庫中使用pg_cron,請在升級遷移作業後,在目的地執行個體上重新安裝及設定。 - 在來源叢集建立專用的遷移使用者帳戶,並授予必要權限:
- 使用管理員帳戶連線至來源叢集、建立使用者,並授予 AWS 代管的
rds_replication角色:CREATE USER MIGRATION_USER_ACCOUNT_NAME WITH PASSWORD 'PASSWORD'; GRANT rds_replication TO "MIGRATION_USER_ACCOUNT_NAME";
- 請授予遷移使用者帳戶預設
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";
- 使用管理員帳戶連線至來源叢集、建立使用者,並授予 AWS 代管的
- 在要遷移的每個資料庫上安裝
pglogical擴充功能,但不包括template0、template1和rdsadmin:CREATE EXTENSION IF NOT EXISTS pglogical;
- 確認資料表有主鍵。如要持續遷移,PostgreSQL 邏輯複製功能需要資料表具有主鍵,才能在變更資料擷取 (CDC) 階段複製
UPDATE和DELETE作業:- 具有主鍵的資料表會自動複製所有
INSERT、UPDATE和DELETE作業。 - 如果資料表沒有主鍵,資料庫遷移服務在 CDC 階段只支援遷移初始快照和後續的
INSERT陳述式。您必須手動遷移UPDATE和DELETE陳述式。建議您先為沒有主鍵的資料表新增主鍵,再開始遷移。如要瞭解如何產生查詢,列出 PostgreSQL 資料庫中沒有主鍵的資料表,或如何手動遷移
UPDATE和DELETE作業,請參閱 偵錯和其他工具。或者,您也可以嘗試使用快速啟動遷移流程:簡化的遷移情境,可讓您使用
REPLICA IDENTITY遷移沒有主鍵的資料表。詳情請參閱 使用快速遷移功能指南。
- 具有主鍵的資料表會自動複製所有
- 設定自訂資料庫叢集參數群組,並附加至叢集:
- 建立自訂資料庫叢集參數群組,並設定下列參數:
- 將
shared_preload_libraries設為包含pglogical。 - 將
rds.logical_replication設為1。這個參數可啟用邏輯 WAL 記錄功能。 - 將
wal_sender_timeout設為0。0值會停用逾時機制,終止閒置的複製連線。 - 將
max_replication_slots設為至少等於要遷移的資料庫數量乘以遷移工作數量,再加上資料表同步處理的保留量:舉例來說,如果來源執行個體上有 5 個資料庫,而您為該來源建立了 2 項遷移工作,則複製槽數量至少須為 5 * 2 = 10,再加上來源上其他工作已使用的複製槽數量。如果您打算使用調整後的資料轉儲平行處理設定,請務必增加複製槽數量,並在建立遷移工作時 執行遷移工作測試,驗證設定。
這個參數的預設值為 10。
- 將
max_wal_senders設為至少max_replication_slots的值,加上執行個體已使用的傳送者數量:舉例來說,如果
max_replication_slots參數設為10,且您已使用 2 個傳送者,則同時執行的 WAL 傳送者程序數量為 10 + 2 = 12。如果您打算使用調整後的資料轉儲平行處理設定,請務必增加傳送者數量,並在建立遷移工作時 執行遷移工作測試,驗證設定。這個參數的預設值為 10。
- 將
max_worker_processes設為至少要遷移的資料庫數量,加上執行個體上現有的 worker 程序。如果您打算使用調整後的資料轉儲平行處理設定,請為每個連線額外考量兩個 worker 程序 (最多 20 個 worker):這個參數的預設值為 8。
- 將
- 將資料庫叢集參數群組附加至 Aurora 資料庫叢集。
- 建立自訂資料庫叢集參數群組,並設定下列參數:
- 重新啟動 Amazon Aurora 資料庫叢集,讓參數群組變更生效。
設定 Microsoft Azure Database for PostgreSQL 彈性伺服器來源
如要為遷移程序設定 Microsoft Azure Database for PostgreSQL Flexible Server 來源執行個體,請按照下列步驟操作:
- 如果是 Microsoft Azure Database for PostgreSQL 彈性伺服器來源,資料庫遷移服務會遷移來源執行個體下的所有資料庫,但不包括 Azure 系統和範本資料庫:
azure_maintenance、azure_sys、template0和template1。 - 確認來源執行個體包含預設的
postgres資料庫。如果這個資料庫不存在,請先建立資料庫,再設定遷移作業。 - 設定 Azure 防火牆和 SSL/TLS 設定:
- 在 Azure 網路設定中,新增防火牆規則,允許來自目的地 Cloud SQL 傳出 IP 位址、虛擬私有雲 CIDR 範圍或反向 SSH 堡壘主機 VM 的通訊埠
5432傳入 TCP 連線。 - 檢查
require_secure_transport伺服器參數的值。 根據預設,Azure 資料庫會要求傳入連線使用 SSL/TLS 加密。視require_secure_transport設定而定,請在建立來源連線設定檔時,選取下列其中一項加密設定:- 如果
require_secure_transport設為on,請選取「Basic」、「TLS」或「mTLS」。 - 如果
require_secure_transport設為off,請選取「None」。
- 如果
- 在 Azure 網路設定中,新增防火牆規則,允許來自目的地 Cloud SQL 傳出 IP 位址、虛擬私有雲 CIDR 範圍或反向 SSH 堡壘主機 VM 的通訊埠
- 確認來源資料庫上安裝的 PostgreSQL 擴充功能。資料庫遷移服務不會遷移 Cloud SQL 不支援的擴充功能。確認來源資料庫物件和應用程式查詢未參照不支援的擴充功能。
請先從來源資料庫中移除不支援的擴充功能和參照,再繼續操作。
資料庫遷移服務不會自動遷移
pg_cron擴充功能,但 PostgreSQL 適用的 Cloud SQL 目的地支援這項功能。如果您在來源資料庫中使用pg_cron,請在升級遷移作業後,在目的地執行個體上重新安裝及設定。 - 在來源執行個體建立專用的遷移使用者帳戶,並授予必要權限:
- 使用管理員帳戶連線至來源執行個體、建立使用者,並指派複製角色:
CREATE USER MIGRATION_USER_ACCOUNT_NAME WITH PASSWORD 'PASSWORD'; ALTER USER MIGRATION_USER_ACCOUNT_NAME WITH REPLICATION;
- 請授予遷移使用者帳戶預設
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";
- 使用管理員帳戶連線至來源執行個體、建立使用者,並指派複製角色:
- 在要遷移的每個資料庫上安裝
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;
- PostgreSQL 9.4 版:執行下列指令:
- 確認資料表有主鍵。如要持續遷移,PostgreSQL 邏輯複製功能需要資料表具有主鍵,才能在變更資料擷取 (CDC) 階段複製
UPDATE和DELETE作業:- 具有主鍵的資料表會自動複製所有
INSERT、UPDATE和DELETE作業。 - 如果資料表沒有主鍵,資料庫遷移服務在 CDC 階段只支援遷移初始快照和後續的
INSERT陳述式。您必須手動遷移UPDATE和DELETE陳述式。建議您先為沒有主鍵的資料表新增主鍵,再開始遷移。如要瞭解如何產生查詢,列出 PostgreSQL 資料庫中沒有主鍵的資料表,或如何手動遷移
UPDATE和DELETE作業,請參閱 偵錯和其他工具。或者,您也可以嘗試使用快速啟動遷移流程:簡化的遷移情境,可讓您使用
REPLICA IDENTITY遷移沒有主鍵的資料表。詳情請參閱 使用快速遷移功能指南。
- 具有主鍵的資料表會自動複製所有
- 執行 PostgreSQL 9.5 以下版本的來源: 如果來源執行個體執行的 PostgreSQL 版本低於 9.6,則無法使用複製延遲指標。如要使用這項指標追蹤遷移進度,請參閱「 啟用複製延遲」。
- 在 Azure 中設定下列伺服器參數。詳情請參閱「在 Azure Database for PostgreSQL 中設定伺服器參數」。
- 將
shared_preload_libraries設為包含pglogical。 - 將
azure.extensions設為包含pglogical。 - 將
wal_level設為logical。 - 將
wal_sender_timeout設為0。0值會停用逾時機制,終止閒置的複製連線。 - 將
max_replication_slots設為至少等於要遷移的資料庫數量乘以遷移工作數量,再加上資料表同步處理的保留量:舉例來說,如果來源執行個體上有 5 個資料庫,而您為該來源建立了 2 項遷移工作,則複製槽數量必須至少為 5 * 2 = 10,再加上來源上其他工作已使用的複製槽數量。如果您打算使用調整後的資料轉儲平行處理設定,請務必增加複製槽數量,並在建立遷移工作時 執行遷移工作測試,驗證設定。
這個參數的預設值為 10。
- 將
max_wal_senders設為至少max_replication_slots的值,加上執行個體已使用的傳送者數量:舉例來說,如果
max_replication_slots參數設為10,且您已使用 2 個傳送者,則同時執行的 WAL 傳送者程序數量為 10 + 2 = 12。如果您打算使用調整後的資料轉儲平行處理設定,請務必增加傳送者數量,並在建立遷移工作時 執行遷移工作測試,驗證設定。這個參數的預設值為 10。
- 將
max_worker_processes設為至少要遷移的資料庫數量,加上執行個體上現有的 worker 程序。如果您打算使用調整後的資料轉儲平行處理設定,請為每個連線額外考量兩個 worker 程序 (最多 20 個 worker):這個參數的預設值為 8。
如要進一步瞭解參數,請參閱 Microsoft 說明文件中的 Azure Database for PostgreSQL 伺服器參數完整清單。
- 將
- 重新啟動 Microsoft Azure Database for PostgreSQL 彈性伺服器執行個體,讓伺服器參數變更生效。
設定 PostgreSQL 適用的 Cloud SQL 來源
如要為遷移程序設定 PostgreSQL 適用的 Cloud SQL 來源執行個體,請按照下列步驟操作:
- 如果是 PostgreSQL 適用的 Cloud SQL 來源,資料庫遷移服務會遷移來源執行個體下的所有資料庫,但範本資料庫
template0和template1除外。 - 確認來源執行個體包含預設的
postgres資料庫。如果這個資料庫不存在,請先建立資料庫,再設定遷移作業。 - 如果從設有私人 IP 位址的 Cloud SQL 來源執行個體,遷移至使用非 RFC 1918 位址 IP 範圍的 Cloud SQL 目的地執行個體,請將非 RFC 1918 範圍新增至來源執行個體的授權網路。詳情請參閱「 設定授權網路」。
- 確認來源資料庫上安裝的 PostgreSQL 擴充功能。資料庫遷移服務不會遷移
Cloud SQL 不支援的擴充功能。確認來源資料庫物件和應用程式查詢未參照不支援的擴充功能。請先從來源資料庫中移除不支援的擴充功能和參照,再繼續操作。
pg_cron擴充功能不會由資料庫遷移服務自動遷移,但 PostgreSQL 適用的 Cloud SQL 目的地支援這項功能。如果您在來源資料庫中使用pg_cron,請在升級遷移作業後,在目的地執行個體上重新安裝及設定。 - 在來源執行個體建立專用的遷移使用者帳戶,並授予必要權限:
- 請按照 Cloud SQL 說明文件「 建立使用者」頁面中的步驟操作。
- 請授予遷移使用者帳戶預設
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";
- 在要遷移的每個資料庫上安裝
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;
- PostgreSQL 9.4 版:執行下列指令:
- 確認資料表有主鍵。如要持續遷移,PostgreSQL 邏輯複製功能需要資料表具有主鍵,才能在變更資料擷取 (CDC) 階段複製
UPDATE和DELETE作業:- 具有主鍵的資料表會自動複製所有
INSERT、UPDATE和DELETE作業。 - 如果資料表沒有主鍵,資料庫遷移服務會在 CDC 階段遷移初始快照和後續的
INSERT陳述式。您必須手動遷移UPDATE和DELETE陳述式。建議您先為沒有主鍵的資料表新增主鍵,再開始遷移。如要瞭解如何產生查詢,列出 PostgreSQL 資料庫中沒有主鍵的資料表,或如何手動遷移
UPDATE和DELETE作業,請參閱 偵錯和其他工具。或者,您也可以嘗試使用快速啟動遷移流程:簡化的遷移情境,可讓您使用
REPLICA IDENTITY遷移沒有主鍵的資料表。詳情請參閱 使用快速遷移功能指南。
- 具有主鍵的資料表會自動複製所有
- 執行 PostgreSQL 9.5 以下版本的來源: 如果來源執行個體執行的 PostgreSQL 版本低於 9.6,則無法使用複製延遲指標。如要使用這項指標追蹤遷移進度,請參閱「 啟用複製延遲」。
- 在 Cloud SQL 來源執行個體上設定下列資料庫旗標:
- 將
cloudsql.logical_decoding設為on。 - 將
cloudsql.enable_pglogical設為on。 - 將
wal_sender_timeout設為0。0值會停用終止閒置複製連線的逾時機制。 - 將
max_replication_slots設為至少等於要遷移的資料庫數量乘以遷移工作數量,再加上資料表同步處理的預留量舉例來說,如果來源執行個體上有 5 個資料庫,而您為該來源建立 2 項遷移工作,則複製運算單元數量至少須為 5 * 2 = 10,再加上來源上其他工作已使用的複製運算單元數量。如果您打算使用調整後的資料轉儲平行處理設定,請務必增加複製槽數量,並在建立遷移工作時 執行遷移工作測試,驗證設定。
這個旗標的預設值為 10。
- 將
max_wal_senders設為至少max_replication_slots的值,加上執行個體已使用的傳送者數量。舉例來說,如果
max_replication_slots旗標設為10,且您已使用 2 個傳送者,則同時執行的 WAL 傳送者程序數量為 10 + 2 = 12。如果您打算使用調整後的資料轉儲平行處理設定,請務必增加傳送者數量,並在建立遷移工作時 執行遷移工作測試,驗證設定。這個旗標的預設值為 10。
- 將
max_worker_processes設為至少要遷移的資料庫數量,加上執行個體上現有的 worker 程序。如果您打算使用調整後的資料轉儲平行處理設定,請為每個連線額外預留兩個 worker 程序 (最多 20 個 worker)。這個旗標的預設值為 8。
如要進一步瞭解如何修改旗標,請參閱 Cloud SQL 說明文件中的「設定資料庫旗標」。
- 將
- 重新啟動來源 Cloud SQL 執行個體,讓資料庫旗標變更生效。
後續步驟
如需完整的逐步遷移操作說明,請參閱「 開始使用 PostgreSQL 適用的 Cloud SQL 遷移作業」。
如要規劃來源和目的地執行個體之間的網路連線,請參閱「 網路總覽」。