概要
現状のVerticaの環境に適応されているDDLがわからなくなってしまったが、Verticaから直接DDLを抽出する方法があったのでメモ。
コマンド
$ vsql -U {ユーザ名} (-w {パスワード}) -h {ホスト名(IP等)} -c "select export_tables('','{対象のデータベース名}');" | sed -e '1,2d' | grep -v " row" > {任意のディレクトリ}/{任意のファイル名}.sql
※(-w {パスワード})は任意です。history等に残るのでコマンドで指定しない方が良いと思いますが。
指定していない場合は、パスワードを聞かれるので入力すればOKです
解説
-
export_tables
: 定義をエクスポートする関数-
('{出力先}','{対象のデータベース名}')
: 指定したデータベースのテーブルのDDLを指定した出力先へ抽出する。- データベース名を指定しない場合は、
-U
で指定したユーザがアクセス権をもつ全定義をエクスポートします。 - データベースの指定はカンマ区切りで複数行うことも可能です。
('','{対象のデータベース名_1},{対象のデータベース名_2}・・・')
- 出力先を指定しない場合は標準出力される(指定できるのはスーパーユーザのみ)
- ※今回は標準出力されたものをDDLとして抽出する為指定していない
- データベース名を指定しない場合は、
- export_tables関数について詳しくはこちらをご覧ください。
-
- sedコマンド
-
-e
: 指定したスクリプト(条件式)で変換処理を行う- ※オプションはなくても大丈夫でした。
-
'1,2d'
: 1行目と2行目を削除する-
無駄な1~2行目を削除しています。別に削除しなくても良いですが、下記のようにファイルサイズが変わるほど邪魔なので、ここで消しておきましょう
-
-
381K sample_processed_data.sql
1.2M sample_raw_data.sql
```
- grepコマンド
-
-v
: マッチしない行を検索結果として表示する -
" row"
: 最終行の(1 row)
みたいな無駄な行を削除している
-
参考記事
Verticaで既存環境のテーブルのDDLとデータを一括で抽出する方法
※若干のオプションの指定ミスがありました