Pivotal Knowledge Base

フォローする

HowTo - バックアップやリストアなしでデータベースの複製を生成

目的

本記事においては、バックアップやリストアなしでデータベースの複製を行う方法について、簡単な手順を考察する。これは、任意の開発者が開発やテスト目的で大元のデータベースの複製版がほしい場合や、データベース上にあるアプリケーション用のテーブルに対して大きな変更を加える前に、当該データベースの複製が必要な場合に大変有用である。

注意: この手順は、クラスター内のデータベースで複製を生成したい場合にのみ有効で、異なる greenplum クラスターのデータベースには対応していない。

解決策

既存データベースに複製を生成するには、以下のコマンドを使用することができる。

create database <新規データベース名> template <既存データベース名>;

大元のデータベースから全ての内容をどのように実際に複製を行うか、以下の例をもって説明する。

  • 大元のデータベース(testdb)に、以下の行数で、以下のようなオブジェクトを保持しているものとする。
testdb=# \d
             List of relations
 Schema | Name | Type  |  Owner  | Storage 
--------+------+-------+---------+---------
 public | a1   | table | gpadmin | heap
 public | a2   | table | gpadmin | heap
 public | a3   | table | gpadmin | heap
(3 rows)

testdb=# select count(*) from a1;
 count 
-------
 10000
(1 row)

Time: 106.450 ms
testdb=# select count(*) from a2;
 count 
-------
 10000
(1 row)

Time: 2.462 ms
testdb=# select count(*) from a3;
 count 
-------
 10000
(1 row)

Time: 1.953 ms
testdb=# 
  • この状況で、データベースの複製を生成する。
testdb=# create database replica template testdb;
CREATE DATABASE
Time: 6272.622 ms
  • 以下のクロス検証の結果、実際に複製したデータベースは testdb の完全な複製であることが分かる。
testdb=# \c replica 
You are now connected to database "replica" as user "gpadmin".
replica=# \d
             List of relations
 Schema | Name | Type  |  Owner  | Storage 
--------+------+-------+---------+---------
 public | a1   | table | gpadmin | heap
 public | a2   | table | gpadmin | heap
 public | a3   | table | gpadmin | heap
(3 rows)

replica=# select count(*) from a1;
 count 
-------
 10000
(1 row)

Time: 218.771 ms
replica=# select count(*) from a2;
 count 
-------
 10000
(1 row)

Time: 2.646 ms
replica=# select count(*) from a3;
 count 
-------
 10000
(1 row)

Time: 2.615 ms
replica=# 

関連記事

コメント

Powered by Zendesk