將資料移入或移出 AlloyDB for PostgreSQL 時,請遵循下列最佳做法,以最佳化效能、降低儲存成本,並避免營運中斷:
- 請勿使用 Cloud Storage 要求者付費 bucket 匯入或匯出。
- 建立 SQL dump 檔案時,請使用正確的旗標。
- 壓縮資料以降低成本。
- 批次處理資料,縮短長時間執行的匯入和匯出程序。
- 匯入後,驗證匯入的資料庫。
請勿使用 Cloud Storage「要求者付費」值區
您無法使用已啟用「要求者付費」功能的 Cloud Storage bucket,將資料匯入 AlloyDB 或從 AlloyDB 匯出資料。AlloyDB 會使用 Google 代管的服務帳戶 (服務代理) 執行匯入和匯出作業。這個代理通常沒有相關背景資訊或設定,無法向要求者的專案收取資料存取費用,因此涉及「要求者付費」值區的操作會失敗。
建立 SQL dump 檔案時,請使用正確的旗標
將資料匯出至 SQL dump 檔案時,如果未使用正確的旗標和選項,匯入作業可能會失敗。如要瞭解如何匯出資料並匯入 AlloyDB,請參閱「匯出 DMP 檔案」和「匯出 SQL 檔案」。
壓縮資料以減少費用
AlloyDB 支援從 Cloud Storage 匯入及匯出壓縮的 .gz 檔案。壓縮功能可大幅節省 Cloud Storage 的儲存空間,並降低儲存成本,特別是在匯出大量資料時。使用 AlloyDB API 匯出 SQL 轉儲或 CSV 檔案時,請在目的地 URI 中使用 .gz 副檔名來壓縮資料。匯入副檔名為 .gz 的檔案時,系統會自動解壓縮檔案。
減少長時間執行的匯入和匯出程序
視資料大小而定,AlloyDB 的匯入和匯出作業可能需要較長時間才能完成。如果作業耗時過長,可能會阻礙其他作業。
使用較小的資料批次,縮短完成每項作業的時間。您也可以使用 pg_dump 工具,從連線至讀取集區執行個體的用戶端手動匯出資料。
驗證匯入的資料庫
匯入作業完成後,請使用 psql 或其他用戶端連線至資料庫,並執行適當的指令,確保內容正確無誤,例如列出資料表或查詢資料列數量。
自動執行匯出作業
雖然 AlloyDB 未提供自動匯出的內建方法,但您可以使用其他Google Cloud 元件 (例如 Cloud Scheduler、Pub/Sub 和 Cloud Run functions) 建構自動化工具。
疑難排解
本節提供建議的修正方法,協助您解決匯入和匯出作業可能遇到的問題。
匯入作業
| 問題 | 說明 | 建議修正方式 |
|---|---|---|
ERROR: permission denied for schema public |
如果是 PostgreSQL 15 以上版本,當您從 template0 建立目標資料庫時,可能會因結構定義權限而無法匯入資料。 |
如要解決這個問題,請使用下列指令,將
GRANT ALL ON SCHEMA public TO IMPORT_USER;
|
| 匯入作業時間過長。 | 有效連線數量過多可能會干擾匯入作業。 |
請嘗試按照下列步驟操作:
|
| 如果 dump 檔案中有一或多位參照的使用者不存在,匯入作業就會失敗。 | 匯入 dump 檔案前,如果資料庫使用者擁有 dump 資料庫中的物件,或已取得 dump 資料庫中的物件權限,這類使用者都必須存在於目標資料庫中。如果不存在,匯入作業就無法以原始擁有權或權限重新建立物件。 | 請先建立必要的資料庫使用者,再匯入資料。 |
GRANT stderr: ERROR: must be member of role ROLE_NAME
|
如果匯入的 SQL dump 檔案包含 ROLE_NAME 擁有的物件,或授予 ROLE_NAME 的權限,但執行匯入作業的資料庫使用者並非 ROLE_NAME 的成員,就可能發生這項錯誤。 |
如要解決這個問題,請確認目的地資料庫中存在 ROLE_NAME 角色,並在執行匯入作業「之前」,將 ROLE_NAME 的成員資格授予執行匯入作業的使用者。 |
匯出作業
| 問題 | 說明 | 建議修正方式 |
|---|---|---|
HTTP Error 403: The service account does not have the required
permissions for the bucket. |
AlloyDB 服務帳戶不具備目的地 bucket 的必要權限。 | 請確認目的地 Cloud Storage bucket 存在,且 AlloyDB 服務帳戶已獲派 roles/storage.objectAdmin 或 roles/storage.objectCreator 角色。這些角色可讓服務帳戶寫入 bucket。請參閱「Cloud Storage 的 Identity and Access Management (IAM) 角色」。 |
| CSV 匯出成功,但 SQL 匯出失敗。 | CSV 和 SQL 格式的匯出方式不同。SQL 格式會匯出資料庫結構定義和資料,通常需要較長的時間。CSV 格式只會匯出您提供的 SELECT 查詢結果資料。 |
如果 SQL 匯出作業失敗或速度太慢,建議您使用 CSV 匯出個別資料表。 |
| 匯出時間過長。 | 如果主要執行個體的匯出作業耗時過長,可能是因為匯出內容過大。 | 建議您分批匯出資料。例如,請個別匯出資料表,而非在單一作業中匯出整個資料庫。您也可以使用 pg_dump 工具,從連線至讀取集區執行個體的用戶端手動匯出資料。 |
pg_restore 記錄中出現 Create Extension 錯誤,或匯入失敗。 |
dump 檔案包含 AlloyDB 不支援或未安裝在叢集上的 PostgreSQL 擴充功能參照。 | 如要移除參照,請編輯 dump 檔案,或在叢集上安裝擴充功能 (如果 AlloyDB 支援)。 |
使用 pg_dumpall 時發生錯誤。 |
pg_dumpall 公用程式搭配 --globals-only 等旗標時,可能需要 AlloyDB 不支援的權限。 |
如要匯出使用者和角色等全域物件,但不包含密碼,請使用下列指令加入
pg_dumpall --globals-only --no-role-passwords
|
匯出作業逾時,或您看到 Connection reset by peer。 |
如果 Cloud Storage 未在特定時間範圍內收到資料,連線可能會重設。如果匯出作業所需的初始資料庫查詢執行時間過長,就可能發生這種情況。 | 如果發生這種情況,請嘗試從連線至讀取集區執行個體的用戶端,使用 pg_dump 工具手動匯出。 |
常見問題
| 問題 | 說明 | 建議修正方式 |
|---|---|---|
HTTP Error 409: Operation failed because another operation was
already in progress. |
系統一次只能執行一項 API 匯入或匯出作業。 | 請待目前的作業完成後再提出要求。 |
後續步驟
- 使用 dump 檔案匯入資料。
- 使用 dump 檔案匯出資料。
- 使用 CSV 檔案匯入資料。
- 使用 CSV 檔案匯出資料。
- 使用 SQL 檔案匯入資料。
- 使用 SQL 檔案匯出資料。
- 啟用自動備份功能。
- 從備份還原。