「本番環境のテーブルデータを開発環境にも反映させて開発環境を最新の状態にしたい」等、ある環境のデータを別環境にもコピーしたい場合があります。このような場合、一旦CSVファイルとしてデータを出力して、開発環境に転送して、開発環境でロードして・・・という手順が考えられますが、Verticaでは特定テーブルのデータを別環境のテーブルに直接コピー(ロード)するCOPY FROM VERTICAという機能があります。
通常のCOPYコマンドではソースデータはCSVファイルを指定しますが、COPY FROM VERTICAでは、別環境のテーブルデータをソースデータとすることができます。
以下に具体的な手順を記載します。
事前準備
事前に以下の作業を実施しておいてください。なお、本記事では本番環境のtable1テーブルのデータを、開発環境のtable1_devテーブルにコピーする方法を例として説明します。
・開発環境に本番環境のtable1テーブルと同じテーブル定義のtable1_devテーブルを作成しておきます。
テーブル定義の確認方法はオブジェクトの定義をエクスポートする方法を参考にしてください。※本例では、どちらのテーブルか区別しやすくするために異なるテーブル名を使用していますが、コピー元、コピー先のテーブル名が同じでも問題ありません。
・table1_devにすでにデータが存在する場合は、TRUNCATE等でデータを全件削除しておいてください。
削除しない場合は、既存データに追記でコピーデータがロードされる形となります。接続の確立
COPY FROM VERTICAコマンドを実行する前に、以下を実行して開発環境から本番環境への接続を確立します。
1 |
dbadmin=> CONNECT TO VERTICA データベース名 USER 接続ユーザ名 PASSWORD 'パスワード' ON '接続先のホスト名',ポート番号; |
例)本番環境のデータベース名がtest、接続ユーザ名がdbadmin、ホスト名がkkasrv、ポート番号が5433(デフォルト)の場合
1 2 3 |
#開発環境で実行 dbadmin=> CONNECT TO VERTICA test USER dbadmin PASSWORD '******' ON 'kkasrv',5433; CONNECT |
正常に接続できた場合は「CONNECT」と出力されます。
COPY FROM VERTICAの実行
接続が確立できたらCOPY FROM VERTICAコマンドを実行し、本番環境のtable1テーブルのデータを、開発環境のtable1_devテーブルにコピーします。
1 |
dbadmin=> COPY コピー先のテーブル名 FROM VERTICA コピー元のデータベース名.スキーマ名.テーブル名 DIRECT; |
※WHERE句等でソース元のデータを絞り込むことはできません。指定したテーブルの全データがコピーされます。
例)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#本番環境で実行 本番環境の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 本記事を公開