將資料匯入及匯出至 PostgreSQL 適用的 AlloyDB 時,請考慮下列最佳做法:
- 請勿使用 Cloud Storage 要求者付費值區匯入或匯出資料。
- 建立 SQL 傾印檔案時使用正確標記。
- 壓縮資料以減少費用。
- 以批次方式處理資料,縮短長時間執行的匯入和匯出程序。
- 匯入後驗證匯入的資料庫。
請勿使用 Cloud Storage「要求者付費」值區
從 AlloyDB 匯入或匯出資料時,不能使用已啟用「要求者付費」的 Cloud Storage bucket。AlloyDB 會使用 Google 代管的服務帳戶 (即服務代理) 執行匯入和匯出作業。這個代理程式通常沒有相關脈絡或設定,無法向要求者的專案收取資料存取費用,因此涉及「由要求者付費」值區的作業會失敗。
建立 SQL 傾印檔案時使用正確標記
如果將資料匯出至 SQL 傾印檔案時沒有使用正確標記和選項,則匯入作業可能不會成功。如要瞭解如何匯出資料以匯入 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 函式) 建構自動化工具。
疑難排解
本節提供匯入及匯出作業可能發生的問題,以及建議的修正方式。
匯入作業
| 問題 | 說明 | 建議修正方式 |
|---|---|---|
ERROR: permission denied for schema public |
如果是 PostgreSQL 15 以上版本,從 template0 建立目標資料庫時,可能會因為結構定義權限而無法匯入資料。 |
如要解決這個問題,請使用下列指令,將
GRANT ALL ON SCHEMA public TO my_import_user;
|
| 匯入作業耗時過長。 | 有效連線過多可能會干擾匯入作業。 |
請嘗試按照下列步驟操作:
|
| 匯入作業失敗,因為傾印檔案中有一或多位參照的使用者不存在。 | 匯入傾印檔案前,如果資料庫使用者擁有傾印資料庫中的物件,或已取得傾印資料庫中的物件存取權,這類使用者都必須存在於目標資料庫中。如果不存在,匯入作業就無法以原始擁有權或權限重新建立物件。 | 匯入前請先建立必要的資料庫使用者。 |
GRANT stderr: ERROR: must be member of role ROLE_NAME
|
如果匯入的 SQL 傾印檔案包含 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 服務帳戶沒有目的地值區的必要權限。 | 請確認目的地 Cloud Storage 值區存在,且 AlloyDB 服務帳戶已獲派 roles/storage.objectAdmin 或 roles/storage.objectCreator 角色。這些角色可讓服務帳戶寫入值區。請參閱「Cloud Storage 的 Identity and Access Management (IAM) 角色」。 |
| CSV 匯出作業成功,但 SQL 匯出作業失敗。 | CSV 和 SQL 格式的匯出方式不同。SQL 格式會匯出資料庫結構定義和資料,通常需要較長時間。CSV 格式只會匯出您提供的 SELECT 查詢所產生的資料。 |
如果 SQL 匯出失敗或速度太慢,請考慮使用 CSV 匯出個別表格。 |
| 匯出時間過長。 | 如果主要執行個體的匯出作業耗時過長,可能是因為匯出內容過大。 | 建議您分批匯出資料。舉例來說,您可以個別匯出資料表,而不是在一次作業中匯出整個資料庫。您也可以使用 pg_dump 工具,從連線至讀取集區執行個體的用戶端手動匯出資料。 |
Create Extension 記錄檔發生錯誤,或匯入失敗。pg_restore |
傾印檔案包含 AlloyDB 不支援的 PostgreSQL 擴充功能參照,或叢集未安裝的擴充功能。 | 如要移除參照,請編輯傾印檔案,或在 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 為基礎的匯入或匯出作業。 | 請待目前的作業完成後再提出要求。 |