本頁面列出 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/data
的dbspace
表格空間,遷移後,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
。
刪除 PostgreSQL 資料庫時發生問題
使用 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
指令。