Nutanix Database Service(NDB)には Copy Data Management 機能があり、ソース DB のスナップショットで、クローン DB をリフレッシュできます。今回は、PostgreSQL のクローン DB を、テスト データを格納したソース DB のスナップショットでリフレッシュしてみます。
今回の内容です。
1. 今回の環境
今回は、下記の投稿で用意したソース DB と クローン DB を使用しています。
ソース DB と、クローン DB が1つずつ存在します。

1-1. ソース DB
NDB 管理上の DB 名は「pgsql15-02」で、NDB タイムマシンは「pgsql15-02_TM」です。

DB Server VM は「pgsql15-vm-02」という名前で、「vectordb」という DB が作成されています。

vectordb にはテーブルが作成してあり、データはインサート済みです。
[postgres@pgsql15-vm-02 ~]$ psql --dbname=vectordb --username=postgres
psql (15.6)
Type "help" for help.
vectordb=# \dt
List of relations
Schema | Name | Type | Owner
--------+-------------------------+-------+----------
public | langchain_pg_collection | table | postgres
public | langchain_pg_embedding | table | postgres
(2 rows)
vectordb=# select count(*) from langchain_pg_embedding;
count
-------
763
(1 row)
vectordb=#
1-2. クローン DB
NDB 管理上の DB 名は「vectordb-clone-01」です。タイムマシンは、ソース DB と同じ「pgsql15-02_TM」が表示されています。

クローン DB にも、vectordb という DB が作成されています。

の DB Server VM は vectordb-clone-vm-01 という名前にしてあったのですが、文字数が長かったためか「vectordb-clone」になっています。クローン DB の vectordb には、この時点ではテーブルが未作成です。
[postgres@vectordb-clone ~]$ psql --dbname=vectordb --username=postgres psql (15.6) Type "help" for help. vectordb=# \dt Did not find any relations. vectordb=# vectordb=# exit [postgres@vectordb-clone ~]$
そして、OS は7日ほど起動したままです。
[postgres@vectordb-clone ~]$ uptime 14:28:25 up 7 days, 1:56, 1 user, load average: 0.00, 0.01, 0.00
2. ソース DB のタイムマシン スナップショット作成
テスト用のテーブルが作成され、テーブルにデータがインサートされている状態のソース DB(に割り当てられている NDB のタイムマシン)で、スナップショットを作成します。
ソース DB で、「スナップショット」をクリックします。

スナップショット名を入力して、「作成」をクリックします。
- スナップショット名: after-data-loading

少し待つと、スナップショットが作成されます。「オペレーション」画面で、タスクの完了を確認しておきます。

タイムマシンの画面でも、スナップショットが作成されたことを確認できます。

3. クローン DB のリフレッシュ
ソース DB のスナップショットで、クローン DB をリフレッシュしてみます。
クローン DB の画面で「リフレッシュ」をクリックします。ちなみに画面右上にある水色の「リフレッシュ」リンクは、ただの画面更新です。

スナップショットを選択して、「リフレッシュ」をクリックします。
- スナップショット: after-data-loading (タイムスタンプ)

しばらく待つと、クローンのリフレッシュが完了します。

4. リフレッシュされた クローン DB の様子
リフレッシュされたクローン DB では、OS が起動されたまま、部分的に仮想ディスクのスナップショット リストアなどが実施されています。vectordb DB に再接続して確認すると、テーブルが作成され、ソース DB のスナップショットと同じ状態になっています。
[postgres@vectordb-clone ~]$ uptime
14:48:30 up 7 days, 2:16, 1 user, load average: 0.01, 0.11, 0.07
[postgres@vectordb-clone ~]$ psql --dbname=vectordb --username=postgres
psql (15.6)
Type "help" for help.
vectordb=# \dt
List of relations
Schema | Name | Type | Owner
--------+-------------------------+-------+----------
public | langchain_pg_collection | table | postgres
public | langchain_pg_embedding | table | postgres
(2 rows)
vectordb=# select count(*) from langchain_pg_embedding;
count
-------
763
(1 row)
vectordb=#
このように、開発環境構築などの目的でクローンしておいた DB を、効率的にソース DB と同じ状態にできそうです。
以上。
