已知問題

本頁面列出 PostgreSQL 適用的 Cloud SQL 的已知問題,以及如何避免發生這些問題或如何復原到問題發生之前的狀態。

如果您的執行個體發生問題,也請查閱「診斷問題」中的資訊。

執行個體連線問題

  • 到期的 SSL/TLS 憑證

    如果執行個體設定為使用安全資料傳輸層 (SSL),請前往 Google Cloud console 中的「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面並開啟執行個體。開啟執行個體的「Connections」(連線設定) 頁面,選取「Security」(安全性) 分頁,確認您的伺服器憑證有效。如果憑證已過期,您必須新增憑證並切換至這個新憑證。

  • Cloud SQL 驗證 Proxy 版本

    如果您使用 Cloud SQL 驗證 Proxy 進行連線,請確認您使用的是最新版本。詳情請參閱保持 Cloud SQL Auth Proxy 為最新版本

  • 未取得授權,無法連線

    如果您嘗試連線至不在該專案中的執行個體,錯誤訊息只會表示您未取得授權,無法存取該執行個體。

  • 無法建立 Cloud SQL 執行個體

    如果看到 Failed to create subnetwork. Router status is temporarily unavailable. Please try again later. Help Token: [token-ID] 錯誤訊息,請嘗試再次建立 Cloud SQL 執行個體。

  • 下列指令僅適用於預設使用者 (「postgres」): gcloud sql connect --user

    如果嘗試使用這個指令與任何其他使用者連線,錯誤訊息會顯示 FATAL: database 'user' does not exist。解決方法是使用預設使用者 (「postgres」) 連線,然後使用 "\c" psql 指令以其他使用者身分重新連線。

  • 啟用 IAM 資料庫 Proxy 驗證時,PostgreSQL 連線會停止運作。

    如果 使用 TCP Socket 啟動 Cloud SQL 驗證 Proxy,並搭配 -enable_iam_login 旗標,PostgreSQL 用戶端會在 TCP 連線期間停止回應。其中一種解決方法是在 PostgreSQL 連線字串中使用 sslmode=disable。例如:

    psql "host=127.0.0.1 dbname=postgres user=me@google.com sslmode=disable"

    另一種解決方法是 使用 Unix 通訊端啟動 Cloud SQL 驗證 Proxy。這會關閉 PostgreSQL SSL 加密,改由 Cloud SQL 驗證 Proxy 執行 SSL 加密。

管理問題

  • 執行個體一次只能執行一項長時間運作的 Cloud SQL 匯入或匯出作業。啟動作業時,請確認您不需要對執行個體執行其他作業。此外,作業開始後,您也可以取消

    PostgreSQL 會在單一交易中匯入資料。因此,如果您取消匯入作業,Cloud SQL 就不會保留匯入的資料。

匯入及匯出資料問題

  • 如果 Cloud SQL 執行個體使用 PostgreSQL 17,但資料庫使用 PostgreSQL 16 和更早版本,則無法使用 Cloud SQL 將這些資料庫匯入執行個體。如要執行這項操作,請使用資料庫移轉服務

  • 如果您使用資料庫移轉服務將 PostgreSQL 17 資料庫匯入 Cloud SQL,系統會將其匯入為 PostgreSQL 16 資料庫。

  • 如果是 PostgreSQL 15 以上版本,且目標資料庫是透過 template0 建立,匯入資料可能會失敗,並顯示 permission denied for schema public 錯誤訊息。如要解決這個問題,請執行 GRANT ALL ON SCHEMA public TO cloudsqlsuperuser SQL 指令,將公開結構定義權限授予 cloudsqlsuperuser 使用者。

  • 匯出許多大型物件會造成執行個體變成無法回應

    如果您的資料庫含有許多大型物件 (blob),則匯出資料庫會耗用許多記憶體,導致執行個體無法回應。即使 blob 是空的,也可能會發生這個問題。

  • Cloud SQL 不支援自訂表空間,但支援將自訂表空間的資料遷移至目標執行個體中的預設表空間 pg_default。舉例來說,如果您擁有位於 /home/datadbspace 表格空間,遷移後,dbspace 內的所有資料都會遷移至 pg_default。但 Cloud SQL 不會在磁碟上建立名為「dbspace」的表空間。

  • 如果嘗試從大型資料庫匯入及匯出資料 (例如資料量達 500 GB 以上的資料庫),匯入及匯出作業可能需要很長時間才能完成。此外,匯入或匯出作業進行期間,您無法執行其他作業 (例如備份作業)。如要提升匯入和匯出程序的效能,可以考慮使用 gcloud 或 API 還原先前的備份

  • Cloud Storage 支援的 單一物件大小上限為 5 TB。如果資料庫大於 5 TB,匯出至 Cloud Storage 的作業就會失敗。在這種情況下,您需要將匯出檔案分割為較小的片段。

交易記錄和磁碟成長

系統每天會清除記錄一次,而非持續清除。如果記錄保留天數與備份天數相同,則可能會遺失一天的記錄,具體情況取決於備份時間。舉例來說,如果將記錄檔保留期限設為七天,備份保留期限設為七次備份,則系統會保留六到七天的記錄檔。

建議您將備份次數設為至少比記錄檔保留天數多一天,以確保記錄檔保留天數符合指定天數下限。

與 Cloud Monitoring 或 Cloud Logging 相關的問題

在特定情況下,具有下列區域名稱的執行個體會顯示錯誤:

  • us-central1 顯示為 us-central
  • europe-west1 顯示為 europe
  • asia-east1 顯示為 asia

這個問題會在下列情況發生:

  • Cloud Monitoring 中的快訊
  • Metrics Explorer
  • Cloud Logging

如要解決 Cloud Monitoring 快訊和 Metrics Explorer 的問題,可以使用資源中繼資料標籤。請使用系統中繼資料標籤 region,而非受監控資源標籤 cloudsql_database region

使用 psql 用戶端刪除在 Google Cloud 控制台中建立的資料庫時,可能會遇到下列錯誤:

ERROR: must be owner of database [DATABASE_NAME]

這是權限錯誤,因為使用 psql 用戶端建立的資料庫擁有者沒有 Cloud SQL superuser 屬性。使用 Google Cloud 控制台建立的資料庫歸 cloudsqlsuperuser 所有,使用 psql 用戶端建立的資料庫則歸連線至該資料庫的使用者所有。由於 Cloud SQL 是代管服務,因此客戶無法建立或存取具備 superuser 屬性的使用者。詳情請參閱「超級使用者限制和權限」。

因此,使用 Google Cloud 控制台建立的資料庫只能透過 Google Cloud 控制台刪除,而使用 psql 用戶端建立的資料庫只能以資料庫擁有者的身分連線並刪除。

如要找出資料庫擁有者,請使用下列指令:

SELECT d.datname as Name,
pg_catalog.pg_get_userbyid(d.datdba) as Owner
FROM pg_catalog.pg_database d
WHERE d.datname = 'DATABASE_NAME';

更改下列內容:

  • DATABASE_NAME:要尋找擁有者資訊的資料庫名稱。

如果資料庫擁有者是 cloudsqlsuperuser,請使用Google Cloud 控制台刪除資料庫。如果資料庫擁有者是 psql 用戶端資料庫使用者,請以資料庫擁有者身分連線,然後執行 DROP DATABASE 指令。