「本番環境のテーブルデータを開発環境にも反映させて開発環境を最新の状態にしたい」等、ある環境のデータを別環境にもコピーしたい場合があります。このような場合、一旦CSVファイルとしてデータを出力して、開発環境に転送して、開発環境でロードして・・・という手順が考えられますが、Verticaでは特定テーブルのデータを別環境のテーブルに直接コピー(ロード)するCOPY FROM VERTICAという機能があります。
通常のCOPYコマンドではソースデータはCSVファイルを指定しますが、COPY FROM VERTICAでは、別環境のテーブルデータをソースデータとすることができます。
以下に具体的な手順を記載します。
事前準備
事前に以下の作業を実施しておいてください。
なお、本記事では本番環境のtable1テーブルのデータを、開発環境のtable1_devテーブルにコピーする方法を例として説明します。
・開発環境に本番環境のtable1テーブルと同じテーブル定義のtable1_devテーブルを作成しておきます。
テーブル定義の確認方法はオブジェクトの定義をエクスポートする方法を参考にしてください。
※本例では、どちらのテーブルか区別しやすくするために異なるテーブル名を使用していますが、コピー元、コピー先のテーブル名が同じでも問題ありません。
・table1_devにすでにデータが存在する場合は、TRUNCATE等でデータを全件削除しておいてください。
削除しない場合は、既存データに追記でコピーデータがロードされる形となります。
接続の確立
COPY FROM VERTICAコマンドを実行する前に、以下を実行して開発環境から本番環境への接続を確立します。
dbadmin=> CONNECT TO VERTICA データベース名 USER 接続ユーザ名 PASSWORD 'パスワード' ON '接続先のホスト名',ポート番号;例)本番環境のデータベース名がtest、接続ユーザ名がdbadmin、ホスト名がkkasrv、ポート番号が5433(デフォルト)の場合
#開発環境で実行
dbadmin=> CONNECT TO VERTICA test USER dbadmin PASSWORD '******' ON 'kkasrv',5433;
CONNECT正常に接続できた場合は「CONNECT」と出力されます。
COPY FROM VERTICAの実行
接続が確立できたらCOPY FROM VERTICAコマンドを実行し、本番環境のtable1テーブルのデータを、開発環境のtable1_devテーブルにコピーします。
dbadmin=> COPY コピー先のテーブル名 FROM VERTICA コピー元のデータベース名.スキーマ名.テーブル名 DIRECT;※WHERE句等でソース元のデータを絞り込むことはできません。指定したテーブルの全データがコピーされます。
例)
#本番環境で実行
本番環境のtable1にデータが1件存在することを確認
dbadmin=> SELECT * FROM table1;
col1 | col2
------+------
1 | 10
(1 row)
#開発環境で実行
開発環境のtable1_devはデータが0件であることを確認
dbadmin=> SELECT * FROM table1_dev;
col1 | col2
------+------
(0 rows)
#開発環境で実行
本番環境のtable1テーブルのデータを開発環境のtable1_devテーブルにコピー
dbadmin=> COPY table1_dev FROM VERTICA test.public.table1 DIRECT;
Rows Loaded
-------------
1
(1 row)
#開発環境で実行
開発環境のtable1_devテーブルに、本番環境のtable1テーブルのデータがコピーされたことを確認
dbadmin=> SELECT * FROM table1_dev;
col1 | col20
------+-------
1 | 10
(1 row)検証バージョンについて
この記事の内容はVertica 9.2で確認しています。
更新履歴
2019/03/18 検証バージョンを9.2に変更
2015/10/29 本記事を公開
