總覽
本頁面提供有助於偵錯及使用 PostgreSQL 的腳本。
為非主鍵資料表遷移更新和刪除作業
如果資料表沒有主鍵,資料庫移轉服務支援在變更資料擷取 (CDC) 階段遷移初始快照和 INSERT
陳述式。
如要更新缺少的 UPDATE
和 DELETE
程序,請參閱本文後續章節。
偵測來源和 Cloud SQL 目的地執行個體之間缺少的資料
- 找出沒有主鍵的資料表:
select tab.table_schema, tab.table_name from information_schema.tables tab left join information_schema.table_constraints tco on tab.table_schema = tco.table_schema and tab.table_name = tco.table_name and tco.constraint_type = 'PRIMARY KEY' where tab.table_type = 'BASE TABLE' and tab.table_schema not in ('pg_catalog', 'information_schema', 'pglogical') and tco.constraint_name is null order by table_schema, table_name;
- 開始遷移作業前,請針對所有沒有主鍵的資料表,使用以下查詢檢查是否有任何更新或刪除作業:
地點:SELECT schemaname, relname, n_tup_ins, n_tup_upd, n_tup_del FROM pg_stat_user_tables WHERE schemaname NOT IN ('pglogical', 'pg_catalog', 'information_schema');
n_tup_ins
:插入的資料列數n_tup_upd
:已更新的資料列數量 (包括已更新的 HOT 資料列)n_tup_del
:已刪除的資料列數量
- 將這些結果儲存在個別資料表或檔案中。
- 遷移設定完成後,請再次執行查詢。
- 比較結果與步驟 3 的結果。
如果遷移期間來源的 n_tup_upd
或 n_tup_del
值有所差異,來源可能會更新或刪除一些資料。
手動將資料從來源遷移至 Cloud SQL 目的地執行個體
如果您發現來源和 Cloud SQL 目的地執行個體之間存在差異,可以使用下列任一選項遷移資料:
選項 1:手動比較來源和 Cloud SQL 目的地之間的資料,並執行適當的 SQL 查詢,只更新來源和備援資源之間不同的資料。
選項 2:針對沒有主鍵的資料表執行
pg_dump
和pg_restore
。詳情請參閱「使用 pg_dump 從內部部署的 PostgreSQL 伺服器匯出資料」。選項 3:使用 Postgres
COPY
指令遷移資料。詳情請參閱 PostgreSQL 說明文件。請注意,這個步驟需要複本 VM 能夠連線至來源 VM。