このページでは、バージョン 15.5.2 以前から AlloyDB Omni の最新バージョンに移行する手順について説明します。
AlloyDB Omni 15.5.4 以降では、一般的なパッケージ管理ツールを使用して AlloyDB Omni を制御します。
AlloyDB Omni がすでにインストールされている場合は、このページの手順に沿って、新しい単一イメージ インストールに移行します。
前提条件
AlloyDB Omni の最新バージョンにアップグレードする前に、以下の作業を完了してください。
AlloyDB Omni 15.5.2 にアップグレードする
AlloyDB Omni CLI をサポートする最新の AlloyDB Omni バージョンは 15.5.2 です。AlloyDB Omni のバージョンを確認するには、次のコマンドを実行します。
sudo alloydb version
出力は次のようになります。
AlloyDB Omni CLI version: 1.6
AlloyDB Omni database server version: 15.5.2
出力に 15.5.2 より前のバージョンのデータベースが表示された場合は、次のコマンドを実行してアップグレードします。
sudo alloydb database-server upgrade
既存のインストールに関する情報を収集する
次のコマンドを実行します。
cat /var/alloydb/config/dataplane.conf
cat
コマンドの出力から、次の変数の値をメモしておきます。DATADIR_PATH
- 例:/var/alloydb/main
ENABLE_ALLOYDB_AI
- 例:FALSE
PGPORT
- 例:5432
INSTANCE_TYPE
- 例:PRIMARY/READ_REPLICA
postgres_ann
拡張機能で作成された ScaNN インデックスを削除する
postgres_ann
拡張機能の名前が alloydb_scann
に変更されました。postgres_ann
拡張機能をインストールし、その拡張機能を使用して ScaNN
インデックスを作成した場合は、アップグレードを行う前に、すべての ScaNN
インデックスを削除し、拡張機能をアンインストールする必要があります。
postgres_ann
拡張機能の名前変更に伴うデータベースへの影響に対応するため、次の操作を行います。
- AlloyDB Omni を実行して接続します。
ScaNN
インデックスを使用するすべてのテーブルを特定します。\c DATABASE_NAME select schemaname, relname, indexrelname, indextype, indexconfig, indexsize, indexscan FROM pg_stat_ann_indexes;
DATABASE_NAME
は、クエリを実行するデータベースの名前に置き換えます。pg_dump
などのユーティリティを使用して、インデックス定義とパラメータをダンプ DDL として保存し、後でScaNN
インデックスを再作成します。pg_dump -st TABLE_NAME DATABASE_NAME
次のように置き換えます。
DATABASE_NAME
: データベースの名前。TABLE_NAME
: テーブルの名前。
postgres_ann
インデックスを使用して作成されたScaNN
インデックスを削除します。DROP INDEX INDEX_NAME;
INDEX_NAME
は、クエリを実行するデータベースの名前に置き換えます。どのデータベースにも
ScaNN
インデックスが含まれていないことを確認します。次の SQL クエリを使用して削除を確認します。次の SQL は空の結果セットを返します。\c DATABASE_NAME select schemaname, relname, indexrelname, indextype, indexconfig, indexsize, indexscan FROM pg_stat_ann_indexes;
次の手順で
postgres_ann
拡張機能を削除します。postgres_ann
拡張機能がデータベースにインストールされていることを確認します。
select * from pg_extension;
postgres_ann
拡張機能をドロップします。
DROP EXTENSION postgres_ann CASCADE;
postgres_ann
拡張機能がデータベースにインストールされていないことを確認します。
select * from pg_extension;
インプレース アップグレードを実行する
既存のデータベースを停止します。
sudo alloydb database-server stop
新しい単一イメージの AlloyDB Omni を起動し、以前の既存のデータ ディレクトリをマウントします。
docker run --name CONTAINER_NAME \ -e POSTGRES_PASSWORD=PASSWORD \ -e PGDATA=/var/lib/postgresql/data \ -v /var/alloydb/main/data:/var/lib/postgresql/data \ -v /dev/shm:/dev/shm \ -p PGPORT:5432 \ --network=host \ --ulimit=nice=-20:-20 \ --ulimit=core=-1:-1 \ --log-driver=journald \ -d google/alloydbomni
次のように置き換えます。
CONTAINER_NAME
: ホストマシンのコンテナ レジストリで、この新しい AlloyDB Omni コンテナを割り当てる名前。例:my-omni
PASSWORD
: 作成後に新しいコンテナのpostgres
ユーザーに割り当てられたパスワード。PGPORT
: AlloyDB Omni が実行されているポートの IP アドレス。これは、既存のインストールに関する情報を収集するの手順 2 でメモした値です。
docker run
の引数は、以前のバージョンの AlloyDB Omni で使用されていたものと同じですが、さらにカスタマイズできます。詳細については、AlloyDB Omni のインストールをカスタマイズするをご覧ください。データベース インスタンス タイプが
PRIMARY
の場合は、以下のコマンドを実行して次のユーザーを作成します。これらは現在使用されていないユーザー名ですが、今後の拡張のために予約されています。for name in alloydbagent alloydbexport alloydbiamgroupuser alloydbiamuser alloydbimportexport alloydbobservability alloydbsqllogical alloydbsuperuser; do echo docker exec -it CONTAINER_NAME psql -h localhost -U postgres alloydbadmin \ -c "CREATE ROLE ${name} NOLOGIN;" \ -c "CREATE TABLE ${name}_table();" \ -c "ALTER TABLE ${name}_table OWNER TO ${name};" done
ENABLE_ALLOYDB_AI
がTRUE
に設定されている場合は、AlloyDB AI と AlloyDB Omni をインストールするの手順に沿って AlloyDB AI を設定します。データベースに接続して、データが変更されていないことを確認します。
docker exec -it CONTAINER_NAME psql -h localhost -U postgres
AlloyDB Omni CLI をアンインストールします。
sudo alloydb database-server uninstall
AlloyDB Omni CLI をアンインストールしても、AlloyDB Omni に保存されているデータに影響はありません。
alloydb_scann
拡張機能を使用して ScaNN インデックスを再作成する
AlloyDB Omni をアップグレードすると、alloydb_scann
拡張機能もインストールされます。アップグレード前に postgres_ann
拡張機能で作成された ScaNN インデックスを削除するセクションで削除した ScaNN インデックスを再作成するには、次の手順を完了します。
次の手順で
alloydb_scann
拡張機能を作成します。alloydb_scann
拡張機能を作成するには、次のクエリを実行します。
create extension alloydb_scann cascade;
alloydb_scann
拡張機能が正常に作成されたことを確認します。
select * from pg_extension;
テーブルの
ScaNN
インデックスを再作成し、以前のpg_dump
DDL インデックス定義を復元します。- テーブルに
ScaNN
インデックスを作成します。
CREATE INDEX INDEX_NAME ON TABLE_NAME USING scann (VECTOR_COLUMN DISTANCE) WITH (num_leaves = NUM_LEAVES_VALUE);
次のように置き換えます。
- INDEX_NAME: インデックスの名前。
- TABLE_NAME: テーブルの名前。
- VECTOR_COLUMN: ベクトルデータを格納する列の名前。
- DISTANCE: このインデックスで使用する距離関数。
- NUM_LEAVES_VALUE: インデックスに適用するパーティションの数。
- インデックスが作成されたことを確認します。
\d TABLE_NAME
- 推奨: インデックス データをバックアップします。ベスト プラクティスとして、データベースとインデックスのバックアップを作成することをおすすめします。
- テーブルに