執行主要版本資料庫就地升級

本頁說明如何對 AlloyDB for PostgreSQL 叢集執行資料庫就地升級主要版本。如要瞭解資料庫就地升級主要版本的用途、工作流程和自動備份功能,請參閱「資料庫就地升級主要版本總覽」。

規劃主要資料庫版本升級

如要規劃主要資料庫版本升級,請按照下列步驟操作:

  1. 找出目前的資料庫主要版本。

    主控台

    1. 前往 Google Cloud 控制台的「Clusters」(叢集) 頁面。

      前往「Clusters」(叢集) 頁面

    2. 從清單中選取叢集。系統隨即會顯示「總覽」頁面。

    3. 在「版本」欄位中找出資料庫主要版本。

    gcloud

    如要瞭解如何安裝及開始使用 gcloud CLI,請參閱「安裝 gcloud CLI」。如要瞭解如何啟動 Cloud Shell,請參閱使用 Cloud Shell

    執行下列指令,取得叢集詳細資料,包括目前的 主要版本:

    gcloud alloydb clusters describe CLUSTER_ID --region=REGION

    請將下列項目改為對應的值:

    • CLUSTER_ID:叢集 ID
    • REGION:叢集位置或區域

    REST v1beta

    執行下列要求,取得叢集詳細資料,包括目前的重大版本:

    GET https://alloydb.googleapis.com/v1beta/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID

    請將下列項目改為對應的值:

    • CLUSTER_ID:叢集 ID
    • PROJECT_ID:專案 ID
    • REGION:叢集位置或區域

    如要傳送要求,請使用下列其中一個選項:

    curl (Linux、macOS 或 Cloud Shell)

    執行下列指令:

       curl -X GET \
             -H "Authorization: Bearer $(gcloud auth print-access-token)" \
             -H "Content-Type: application/json; charset=utf-8" \
             "https://alloydb.googleapis.com/v1beta/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID"
       

    PowerShell (Windows)

    執行下列指令:

       $cred = gcloud auth print-access-token
       $headers = @{ "Authorization" = "Bearer $cred" }
    
       Invoke-WebRequest `
         -Method GET `
         -Headers $headers `
         -Uri "https://alloydb.googleapis.com/v1beta/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID| Select-Object -Expand Content
       
  2. 從下表中找出目標資料庫的主要版本。如需 AlloyDB 支援的資料庫版本完整清單,請參閱「資料庫版本和版本政策」。

    來源主要版本 支援的目標主要版本
    POSTGRES_14
    • POSTGRES_15
    • POSTGRES_16
    POSTGRES_15
    • POSTGRES_16
  3. 查看各資料庫主要版本提供的功能。

  4. 找出需要解決的不相容問題。新的主要版本可能會導入不相容的變更,您可能需要修改應用程式碼、結構定義或資料庫設定。

  5. 在正式版叢集上開始升級主要版本前,建議您複製叢集,並在複製的叢集上測試升級主要版本。

    除了確認升級作業順利完成,也請執行測試,確保應用程式在升級後的叢集上運作正常。

準備叢集以升級主要版本

如要連線至資料庫,請使用下列其中一種方式:

  1. 捨棄或升級跨區域備用資源。資料庫就地升級主要版本時,不支援跨區域副本。詳情請參閱「跨區域複製」。

  2. 如果 AlloyDB 叢集是邏輯複寫來源,請停用下游訂閱項目,並捨棄所有邏輯複寫時段。升級後,您可以重新啟用訂閱項目,並重新建立邏輯複寫時段。如果 AlloyDB 執行個體只是邏輯複寫目標,則不需要執行這些步驟。如要停用訂閱項目並捨棄邏輯複寫位置,請按照下列步驟操作:

    1. 在訂閱者或下游複寫目標上,停用每個下游訂閱項目。請勿在升級中的 AlloyDB 執行個體上停用下游訂閱項目:

      • 如果您使用 pglogical,請執行下列指令:

        SELECT * FROM
        pglogical.alter_subscription_disable(SUBSCRIPTION_NAME, immediate);
        

        將查詢中的 SUBSCRIPTION_NAME 替換為現有訂閱方案名稱。如需立即停用訂閱項目,請將 immediate 參數的值設為 true。根據預設,值為 false,且訂閱方案只會在目前交易結束後停用。

        例如:

        postgres=> SELECT * FROM pglogical.alter_subscription_disable('test_sub',true);
        alter_subscription_disable
        ----------------------------
        t
        (1 row)
        
      • 如果您使用的擴充功能不是 pglogical,請執行下列指令:

        ALTER SUBSCRIPTION SUBSCRIPTION_NAME DISABLE;
        
    2. 在 AlloyDB 主要執行個體上,執行下列指令來捨棄所有邏輯複寫運算單元:

      SELECT pg_drop_replication_slot(REPLICATION_SLOT_NAME) FROM pg_replication_slots WHERE slot_type = 'logical';
      

      將查詢中的 REPLICATION_SLOT_NAME 替換為複製運算單元名稱。

  3. 管理 PostgreSQL 擴充功能。詳情請參閱「設定資料庫擴充功能」。

    升級前檢查會偵測擴充功能不相容問題,並在記錄中顯示這些違規事項,以及建議採取的動作。詳情請參閱「查看升級前檢查失敗情形」。

    您可能需要執行下列操作:

    1. 刪除目標版本不再支援的擴充功能。
    2. 將 PostGIS 和相關擴充功能 (address_standardizeraddress_standardizer_data_uspostgis_rasterpostgis_sfcgalpostgis_tiger_geocoderpostgis_topology) 升級至目標 PostgreSQL 版本支援的版本。詳情請參閱「PostGIS 擴充功能」。下表列出各 PostgreSQL 主要版本支援的最低 PostGIS 擴充功能版本:

      PostgreSQL 版本 PostGIS 最低支援版本
      PG14 3.1
      PG15 3.2
      PG16 3.4

      舉例來說,如果您的 PostGIS 版本是 3.1.x,且想從 POSTGRES 14 升級至 POSTGRES 16,請使用下列指令升級 PostGIS 擴充功能:

      ALTER EXTENSION postgis UPDATE TO '3.4.0';
      SELECT PostGIS_Version();
      
  4. 執行下列查詢,並檢查每個資料庫的 datallowconn 欄位,確認允許連線 (template0 除外):

    SELECT datname,datallowconn from pg_database;
    

    datallowconn 欄位中的 t 值表示允許連線。f 值表示無法建立連線。template0資料庫不得允許連線。

    如要允許連線至資料庫,請執行下列指令:

    ALTER DATABASE DATABASE_NAME WITH ALLOW_CONNECTIONS = true;
    
  5. 執行下列指令,確認 template1 是範本資料庫:

    SELECT datname, datistemplate FROM pg_database WHERE datname = 'template1';
    

    如果 datistemplatef,請執行下列指令,將其設為 true

    ALTER DATABASE template1 WITH IS_TEMPLATE true;
    

就地升級叢集主要版本

資料庫就地升級主要版本可能需要 40 分鐘到 48 小時才能完成,具體時間取決於資料庫大小、結構定義大小,以及叢集中的讀取集區執行個體數量。主要執行個體停機時間通常為 20 分鐘到 1 小時,主要取決於資料庫結構。

當您提出就地升級主要版本的要求時,AlloyDB 會先執行升級前檢查。如果 AlloyDB 判斷叢集尚未準備好升級主要版本,要求就會失敗。詳情請參閱「排解主要版本就地升級問題」。

如要就地升級主要資料庫版本,請按照下列步驟操作:

主控台

  1. 前往 Google Cloud 控制台的「Clusters」(叢集) 頁面。

    前往「Clusters」(叢集) 頁面

  2. 從清單中選取叢集。系統隨即會顯示「總覽」頁面。

  3. 按一下「升級」,開始升級資料庫主要版本。

  4. 在「選擇資料庫版本」步驟中,選取其中一個可用的資料庫主要版本做為目標主要版本。

  5. 按一下「繼續」

  6. 在「Upgrade cluster」(升級叢集) 步驟的「Cluster ID」(叢集 ID) 欄位中,輸入叢集名稱。

  7. 按一下「開始升級」。系統會將你導向「升級狀態」步驟,你可以在這裡查看升級狀態。詳情請參閱「監控主要資料庫版本升級」。

gcloud

執行下列指令,啟動就地升級主要版本:

gcloud alloydb clusters upgrade CLUSTER_ID --region=REGION --version=DATABASE_VERSION --async

指令範例如下:

gcloud alloydb clusters upgrade my-cluster --region=us-central1 --version=POSTGRES_16 --async

REST v1beta

執行下列指令,啟動就地升級主要版本:

PATCH https://alloydb.googleapis.com/v1beta/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:upgrade

JSON 要求內文:

{
  "version": "DATABASE_VERSION"
}

請替換為目標資料庫主要版本的列舉,該版本必須比目前版本新。

要求 JSON 主體範例:

{
"version": "POSTGRES_16"
}

Terraform

如要將資料庫叢集中的執行個體升級至 PostgreSQL 版本,請使用 Terraform 資源,並將 database_version 設為支援的目標主要版本

resource "google_alloydb_instance" "default" {
cluster       = google_alloydb_cluster.default.name
instance_id   = "alloydb-instance"
instance_type = "PRIMARY"

machine_config {
  cpu_count = 2
}

depends_on = [google_service_networking_connection.vpc_connection]
}

resource "google_alloydb_cluster" "default" {
  cluster_id = "alloydb-cluster"
  location   = "us-central1"
  network_config {
    network = google_compute_network.default.id
  }
  database_version = "POSTGRES_16"

  initial_user {
    password = "alloydb-cluster"
  }
}

data "google_project" "project" {}

resource "google_compute_network" "default" {
  name = "alloydb-network"
}

resource "google_compute_global_address" "private_ip_alloc" {
  name          =  "alloydb-cluster"
  address_type  = "INTERNAL"
  purpose       = "VPC_PEERING"
  prefix_length = 16
  network       = google_compute_network.default.id
}

resource "google_service_networking_connection" "vpc_connection" {
  network                 = google_compute_network.default.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.private_ip_alloc.name]
}

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

監控叢集主要版本升級作業

就地升級主要資料庫版本開始後,您可以使用 Google Cloud 控制台、gcloud CLI 或 REST API 監控升級狀態。

主控台

請按照下列步驟在 Google Cloud 控制台中查看升級狀態:

  1. 前往 Google Cloud 控制台的「Clusters」(叢集) 頁面。

    前往「Clusters」(叢集) 頁面

  2. 選取要升級的叢集。系統隨即會顯示「總覽」頁面。

  3. 開啟「總覽」頁面。

  4. 按一下「升級狀態」。系統會顯示「升級狀態」頁面,您可以在這裡查看升級狀態。

gcloud

請按照下列步驟,在 gcloud CLI 中查看升級狀態:

  1. 執行下列指令,取得升級作業 ID。執行指令前,請將 CLUSTER_ID 變數替換為叢集名稱:

    gcloud alloydb operations list --cluster=CLUSTER_ID --region=REGION_ID --filter=metadata.verb:upgrade

    用於觸發主要版本升級的 gcloud CLI 呼叫。alloydb beta clusters upgrade,並以同步回應的形式傳回作業 ID。或者,使用 gcloud alloydb operations list 指令並加上 --cluster 旗標。

    指令範例如下:

    gcloud alloydb operations list --cluster=my-cluster --region=us-central1 --filter=metadata.verb:upgrade
  2. 執行 gcloud alloydb operations describe 指令,監控升級狀態:

    gcloud alloydb operations describe OPERATION_ID
    --region=REGION

REST v1beta

請按照下列步驟,透過 REST API 檢查升級狀態:

  1. 取得升級作業 ID。

    使用下列 GET 要求和 operations.list 方法,列出所有升級作業,並找出與目標叢集對應的作業:

    GET https://alloydb.googleapis.com/v1beta/projects/PROJECT_ID/locations/REGION/operations/filter=metadata.verb:upgrade

    REST API 呼叫會以同步回應的形式傳回作業 ID。

  2. 監控升級狀態。

    使用 GET 要求和 operations.get 方法:

      GET https://alloydb.googleapis.com/v1beta/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID

    請將下列項目改為對應的值:

    • PROJECT_ID:專案 ID
    • REGION:叢集位置或區域
    • OPERATION_ID:升級作業 ID,在上一個步驟中擷取。

    以下是作業進行中的回應範例:

    {
    "name": "projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID",
    "metadata": {
    "@type": "type.googleapis.com/google.cloud.alloydb.v1.OperationMetadata",
    "createTime": "2024-09-16T23:17:39.727319438Z",
    "target": "projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID",
    "verb": "upgrade",
    "requestedCancellation": false,
    "apiVersion": "v1",
    "upgradeClusterStatus": {
       "state": "IN_PROGRESS",
       "cancellable": true,
       "stages": [
        {
          "stage": "ALLOYDB_PRECHECK",
          "state": "IN_PROGRESS"
        },
        {
          "stage": "PG_UPGRADE_CHECK",
          "state": "IN_PROGRESS"
        },
        {
          "stage": "PREPARE_FOR_UPGRADE",
          "state": "NOT_STARTED"
        },
        {
          "stage": "PRIMARY_INSTANCE_UPGRADE",
          "state": "NOT_STARTED"
        },
        {
          "stage": "CLEANUP",
          "state": "NOT_STARTED"
        }
       ]
     }
    },
    "done":false
    }
    

    作業完成時的回應範例如下:

    {
    "operations": [
    {
     "metadata": {
     "@type": "type.googleapis.com/google.cloud.alloydb.v1betaalpha.OperationMetadata",
     "createTime": "2024-09-16T21:52:17.303861317Z",
     "endTime": "2024-09-16T22:29:13.947527949Z",
     "target": "projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID",
     "verb": "upgrade",
     "requestedCancellation": false,
     "apiVersion": "v1beta",
     "upgradeClusterStatus": {
      "state": "SUCCESS",
      "stages": [
        {
          "stage": "ALLOYDB_PRECHECK",
          "state": "SUCCESS"
        },
        {
          "stage": "PG_UPGRADE_CHECK",
          "state": "SUCCESS"
        },
        {
          "stage": "PREPARE_FOR_UPGRADE",
          "state": "SUCCESS"
        },
        {
          "stage": "PRIMARY_INSTANCE_UPGRADE",
          "state": "SUCCESS"
        },
        {
          "stage": "CLEANUP",
          "state": SUCCESS"
        }
       ]
     }
    },
    "response": {
         …
    },
    "name":  "projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID",
    "done": true
    }
    ]
    }
    

    如要進一步瞭解 response 結構,請參閱升級作業回應

升級作業回應

UpgradeCluster 作業回應包含下列項目:

  • status:整體升級作業的狀態。可能的值為 SUCCESSFAILEDPARTIAL_SUCCESS.
  • message:簡要說明升級作業結果。
  • clusterUpgradeDetails:正在升級的叢集升級詳細資料。這個欄位是陣列。AlloyDB 只允許單一叢集升級,因此只包含一個項目。
    • name:叢集的完整名稱。
    • upgradeStatus:叢集升級狀態。可能的值為 SUCCESSFAILEDPARTIAL_SUCCESSPARTIAL_SUCCESS 表示一或多個讀取集區執行個體無法升級。
    • clusterType:叢集類型。AlloyDB 只允許升級單一 PRIMARY 叢集。這個類型一律為 PRIMARY
    • databaseVersion:叢集的目前資料庫版本。
    • stageInfo:核心升級階段的相關資訊。
      • statusSUCCESSFAILED
      • logs_url:連結至階段產生的記錄。 如果階段不會產生記錄,則為空白。
    • instanceUpgradeDetails:叢集中所有執行個體的升級資訊。
      • name:執行個體的完整名稱
      • upgradeStatusSUCCESSFAILED
      • instanceTypePRIMARYREAD_POOL

以下是升級作業的回應範例:

"response": {
  "@type": "type.googleapis.com/google.cloud.alloydb.v1alpha.UpgradeClusterResponse",
  "status": "SUCCESS",
  "message": "Cluster upgraded successfully.",
  "clusterUpgradeDetails": [
    {
      "name": "projects/1234/locations/us-central1/clusters/abc",
      "upgradeStatus": "SUCCESS",
      "clusterType": "PRIMARY",
      "databaseVersion": "POSTGRES_16",
      "stageInfo": [
        {
          "stage": "ALLOYDB_PRECHECK",
          "status": "SUCCESS",
          "logsUrl": "https://console.cloud.google.com/logs/query..."
        },
        {
          "stage": "PG_UPGRADE_CHECK",
          "status": "SUCCESS",
          "logsUrl": "https://console.cloud.google.com/logs/query..."
        },
        {
          "stage": "PRIMARY_INSTANCE_UPGRADE",
          "status": "SUCCESS",
          "logsUrl": "https://console.cloud.google.com/logs/query..."
        },
        {
          "stage": "READ_POOL_INSTANCES_UPGRADE",
          "status": "SUCCESS",
        }
      ],
      "instanceUpgradeDetails": [
        {
          "name": "projects/1234/locations/us-central1/clusters/abc/instances/primary",
          "upgradeStatus": "SUCCESS",
          "instanceType": "PRIMARY",
        },
        {
          "name": "projects/1234/locations/us-central1/clusters/abc/instances/read1",
          "upgradeStatus": "SUCCESS",
          "instanceType": "READ_POOL",
        },
        {
          "name": "projects/1234/locations/us-central1/clusters/abc/instances/read2",
          "upgradeStatus": "SUCCESS",
          "instanceType": "READ_POOL",
        }
      ]
    }
  ]
}

查看 AlloyDB 升級記錄

AlloyDB 會將所有升級記錄發布至 postgres_upgrade 記錄名稱。

如要查看升級相關記錄,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面:

    前往「Logs Explorer」(記錄檔探索工具)

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果

  2. 選取 alloydb.googleapis.com/postgres_upgrade 做為記錄檔名稱。這會轉譯為查詢 "logName="projects/PROJECT_ID/logs/alloydb.googleapis.com%2Fpostgres_upgrade"

  3. 使用下列標籤篩選記錄:

    標籤 說明

    LOG_TYPE

    產生記錄的升級階段。可能的值為 ALLOYDB_PRECHECKPG_UPGRADE_CHECKPG_UPGRADE

    OPERATION_NAME

    升級作業的完整作業名稱。

    FILE_NAME

    只會填入 pg_upgrade_checkpg_upgrade 記錄,並對應至 pg_upgrade 公用程式產生的記錄檔。

以下是查詢範例,可傳回特定作業的 AlloyDB 升級前檢查記錄:

logName="projects/project1234/logs/alloydb.googleapis.com%2Fpostgres_upgrade"
labels.LOG_TYPE="ALLOYDB_PRECHECK"
labels.OPERATION_NAME="projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID"

如要進一步瞭解升級檢查,請參閱「資料庫就地升級主要版本總覽」。

查看叢集的升級記錄

如果您不知道作業 ID,且作業已過期,請按照下列步驟查看叢集的升級記錄:

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面:

    前往「Logs Explorer」(記錄檔探索工具)

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果

  2. 查詢叢集的 AlloyDB 前置檢查記錄。

    logName="projects/PROJECT_ID/logs/alloydb.googleapis.com%2Fpostgres_upgrade"
    labels.LOG_TYPE="ALLOYDB_PRECHECK"
    resource.labels.cluster_id=CLUSTER_ID
    
  3. OPERATION_NAME 記錄標籤找出 Operation_ID

    在以下範例中,OPERATION_NAMEOperation_IDoperation-1728225968201-623cff6ed1e02-e34b7191-3cd92013

    labels.OPERATION_NAME="projects/myproject/locations/us-central1/operations/operation-1728225968201-623cff6ed1e02-e34b7191-3cd92013"
    
  4. 查詢特定作業的所有 postgres_upgrade 記錄。

    logName="projects/production-1/logs/alloydb.googleapis.com%2Fpostgres_upgrade"
    labels.OPERATION_NAME="operation-1728225968201-623cff6ed1e02-e34b7191-3cd92013"
    

取消資料庫就地升級主要版本

您可以透過 Google Cloud 控制台、gcloud CLI 或 REST API,取消進行中的主要版本升級作業。

找出作業 ID

如要使用 gcloud CLI 或 REST API 取消主要版本升級作業,您需要作業 ID。您必須在 gcloud CLI 或 REST API 指令中指定這個 ID,AlloyDB 才能知道要取消哪個作業。

主要執行個體升級達到某個階段後,就無法取消升級。

開始就地升級主要版本時,作業 ID 會在回應的 name 欄位中傳回。請參閱回應範例

您也可以對 AlloyDB 叢集進行 operations.list 呼叫,找出作業 ID。

取消升級

如要取消就地升級主要版本,請按照下列步驟操作:

主控台

  1. 前往 Google Cloud 控制台的「Clusters」(叢集) 頁面。

    前往「Clusters」(叢集) 頁面

  2. 從清單中選取叢集。系統隨即會顯示「總覽」頁面。

  3. 按一下「升級」狀態

  4. 按一下「取消升級」。如果無法取消升級,這個按鈕會顯示為灰色。

gcloud

使用 gcloud alloydb operations cancel 指令取消作業:

gcloud alloydb operations cancel OPERATION_ID

OPERATION_ID 變數替換為作業 ID。

如果 UpgradeClusterStatusgcloud alloydb operations cancel 指令的輸出內容中顯示為 cancellable,AlloyDB 會忽略取消要求,並繼續升級。false在這種情況下,API 不會擲回錯誤,而是傳回空白的回應。如要進一步瞭解升級狀態,請參閱「監控叢集主要版本升級」。

REST v1beta

執行下列指令:

POST https://alloydb.googleapis.com/v1beta/projects/PROJECT_ID/operations/OPERATION_ID:cancel

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:專案 ID。
  • OPERATION_ID:匯入或匯出作業的 ID。

如果 UpgradeClusterStatus 中的 cancellablefalse,則無法取消升級。

如要傳送要求,請使用下列其中一個選項:

curl (Linux、macOS 或 Cloud Shell)

執行下列指令:

       curl -X POST \
             -H "Authorization: Bearer $(gcloud auth print-access-token)" \
             -H "Content-Type: application/json; charset=utf-8" \
             -d "" \
            "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID:cancel"
  

PowerShell (Windows)

執行下列指令:

       $cred = gcloud auth print-access-token
       $headers = @{ "Authorization" = "Bearer $cred" }

       Invoke-WebRequest `
         -Method POST `
         -Headers $headers `
         -Uri "https://alloydb.googleapis.com/v1beta/projects/PROJECT_ID/operations/OPERATION_ID:cancel"| Select-Object -Expand Content
    

您應該會收到如下的 JSON 回應:

回應

這個 REST API 呼叫不會傳回任何回應。

完成主要版本直接升級

如要完成主要版本升級,請使用 AlloyDB Studiopsql其他連線方法連線至 AlloyDB 執行個體。

如果您使用非 AlloyDB 系統,請參閱系統文件瞭解連線指示。

升級叢集後,請按照下列步驟完成升級:

  1. 如果先前停用了 pglogical,請重新啟用 pglogical 複寫功能。 啟用 pglogical 複製功能時,系統會自動建立必要的複製時段。

    1. 使用下列指令,在目的地副本上捨棄 pglogical 訂閱項目:

        select pglogical.drop_subscription(subscription_name name);
      

      name 換成現有訂閱方案的名稱。例如:

      postgres=> select pglogical.drop_subscription(subscription_name:= 'test_sub');
      -[ RECORD 1 ]-----+--
      drop_subscription |1
      
      1.  Recreate the `pglogical` subscription on the destination or
        replica by providing the following connection information to the
        AlloyDB primary instance:
      
        ```sql
        SELECT pglogical.create_subscription(
        subscription_name :='test_sub',<br>
        provider_dsn := 'host=primary-ip port=5432 dbname=postgres user=replication_user password=replicapassword'
        );
        ```
      
      1.  Check the status of the subscription by using the following command:
      
        ```sql
        SELECT * FROM pglogical.show_subscription_status('test_sub');
        ```
      
      1.  Test the replication by performing write transactions and
        verifying that the changes are visible on the destination.
      
  2. 重新整理資料庫統計資料。

    升級完成後,請在主要叢集上執行 ANALYZE,更新系統統計資料。準確的統計資料可確保 PostgreSQL 查詢規劃工具以最佳方式處理查詢。如果缺少統計資料,可能會導致查詢計畫不準確,進而降低效能並佔用過多記憶體。

  3. 執行驗收測試,確保升級後的系統運作正常。

  4. 在 Google Cloud 控制台的叢集「總覽」頁面中,確認升級後的資料庫主要版本是否顯示在原位置。

還原至前一個主要版本

如果升級後的資料庫系統無法正常運作,您可能需要還原至升級前的狀態。如要達成這個目標,您可以從升級前備份還原,包括 AlloyDB 在升級程序中自動建立的備份,或是現有的升級前備份,藉此建立處於升級前狀態的新叢集。

如要還原至升級前的狀態,請按照下列步驟操作:

  1. 找出要還原的升級前備份。在升級過程中,AlloyDB 會自動建立前置字元為 pre-upgrade-bkp 的升級前備份。詳情請參閱「查看備份清單」。

  2. 從升級前的備份啟動還原作業,建立使用舊版 PostgreSQL 的新叢集。詳情請參閱「從儲存的備份還原叢集」。

  3. 連結應用程式。更新應用程式,提供有關還原叢集及其讀取副本的詳細資料。您可以在還原的叢集上恢復放送流量。

您也可以執行時間點復原,將資料庫還原至升級前的時間點。詳情請參閱使用時間點復原 (PITR)

限制

以下限制會影響 AlloyDB 的就地升級主要版本:

  • 您無法在次要叢集上就地升級主要版本。
  • 如果執行個體有超過 1,000 個資料庫,從一個版本升級至另一個版本可能需要很長時間,且升級作業可能會逾時。
  • AlloyDB 不支援升級使用 pg_largeobject_metadata 的叢集。如果 select count(*) from pg_largeobject_metadata; 為非零值,升級就會失敗。
  • 就地升級主要版本作業可能會在升級前備份或升級後備份完成前完成,尤其是當您擁有大型資料庫,但結構定義物件較少時。
  • 升級後的執行個體重新開始寫入資料後,可能要過一段時間才會建立升級後備份。也就是說,升級後的備份內容可能與升級前資料庫的內容不符。
  • 如果就地升級主要版本失敗,系統可能仍會建立升級前備份。
  • 由於自動升級備份是持續進行,因此您必須等到備份達到持續備份與復原的保留期限上限,才能刪除。達到保留時間上限後,系統會進行垃圾收集作業,刪除備份;您也可以使用 gcloud CLI 手動刪除備份。詳情請參閱「刪除備份資料的限制」。

後續步驟