開発時のデータベースクライアントは何を使っていますか?
「Jailer Database Tool」を使っていないなら、普段使いツールに加えてみるとちょっと世界が変わるかも知れません。
世の中には様々な神ツールが存在しますが、個人的にはこれもその一つだと思っています。
目次
Jailer Database Tools
DB操作、可視化、データエクスポートなどをしてくれるツールです。JavaのSwingで作られていてソースも公開されています。2007年から公開されている老舗OSS。
今回の実行環境
- Windows 10
- Java 8
- Jailer 8.8.1
- サンプルDB「dvdrental」が入ったPostgreSQL
dvdrentalのインストールはこちらの記事で実施しています。
インストールとDB接続設定
リリースページから最新版の「zip」をダウンロードします。exeは署名を掛けてくれていないようで、実行時にWindowsに警告を喰らうのでzip推奨です。今回はjailer_8.8.1.zipをダウンロード。
https://github.com/Wisser/Jailer/releases
zipを解凍し、中のjailer.exeを実行すると以下の画面が表示されます。
「New」ボタンをクリックして適当にデータセットの名前を付けます。今回は「dvdrental」です。
「Analyze Database」ボタンをクリックして接続したいDBの接続情報を入れて行けばOKです。
完了後、上記画像のdvdrental行をダブルクリックすることで次の画面に遷移します。インストールと設定完了です。
このツールを使うことで得られる恩恵
1.テーブル相関を見易く出してくれる
テーブルを選択すると依存の有るテーブルをビジュアライズしてくれます。DB構造を把握するのが早くなりますね。
2.HTMLドキュメントでテーブル詳細を出してくれる
Javadoc的な感覚でテーブルやビュー事にHTMLページを作ってくれます。手軽なリファレンスとして使えます。
3.SQLクエリビルダ
この画面から直接実行出来ないのはちょっと不便ですが、コピーしてDataBrowser画面に貼り付けて使用できます。
4.ビジュアルなデータブラウザ機能
「Tools」→「DataBrowser」で独立したデータビュー、SQL実行出来る画面が表示されます。
行と列で表示するだけでなく、レコードレベルで関連を可視化してくれるというホスピタリティの高さ。無料でここまでやってくれるツールは他には無いんじゃないでしょうか。
テーブルごとのレコードを子ウィンドウとして出してくれるので、複数テーブルを俯瞰出来て直感的にレコードを眺められます。
5.異種DB間移行を含めたデータエクスポート
現在見ているデータを他DBに移行する為のSQLを作ってくれます。where条件も付けられます。
エクスポート中画面。エクスポートされた関連テーブルがこれもまたビジュアルに表示されます。いちいち直感的で分かり易い。
エクスポートされたターゲットDBに合わせたinsert文。
-- generated by Jailer 8.8.1, Sat Jul 27 20:58:45 JST 2019 from naka@phemt
-- Extraction Model: all rows from customer (file:/C:/Users/naka/Desktop/jailer/tmp/em-20-57-15-980.jm)
-- Source DBMS: PostgreSQL
-- Target DBMS: PostgreSQL
-- Database URL: jdbc:postgresql://192.168.0.4:5432/dvdrental
-- Database User: devel
-- Exported Rows: 44815
-- actor 200
-- address 603
-- category 16
-- city 600
-- country 109
-- customer 599
-- film 1000
-- film_actor 5462
-- film_category 1000
-- inventory 4581
-- language 1
-- payment 14596
-- rental 16044
-- staff 2
-- store 2
-- sync
Insert into actor(actor_id, first_name, last_name, last_update) values
(1, 'Penelope', 'Guiness', to_timestamp('2013-05-26 14.47.57.62', 'YYYY-MM-DD HH24.MI.SS.US')),
(2, 'Nick', 'Wahlberg', to_timestamp('2013-05-26 14.47.57.62', 'YYYY-MM-DD HH24.MI.SS.US')),
(3, 'Ed', 'Chase', to_timestamp('2013-05-26 14.47.57.62', 'YYYY-MM-DD HH24.MI.SS.US')),
(4, 'Jennifer', 'Davis', to_timestamp('2013-05-26 14.47.57.62', 'YYYY-MM-DD HH24.MI.SS.US')),
(5, 'Johnny', 'Lollobrigida', to_timestamp('2013-05-26 14.47.57.62', 'YYYY-MM-DD HH24.MI.SS.US')),
(6, 'Bette', 'Nicholson', to_timestamp('2013-05-26 14.47.57.62', 'YYYY-MM-DD HH24.MI.SS.US')),
(7, 'Grace', 'Mostel', to_timestamp('2013-05-26 14.47.57.62', 'YYYY-MM-DD HH24.MI.SS.US')),
(8, 'Matthew', 'Johansson', to_timestamp('2013-05-26 14.47.57.62', 'YYYY-MM-DD HH24.MI.SS.US')),
(9, 'Joe', 'Swank', to_timestamp('2013-05-26 14.47.57.62', 'YYYY-MM-DD HH24.MI.SS.US')),
(10, 'Christian', 'Gable', to_timestamp('2013-05-26 14.47.57.62', 'YYYY-MM-DD HH24.MI.SS.US')),
(11, 'Zero', 'Cage', to_timestamp('2013-05-26 14.47.57.62', 'YYYY-MM-DD HH24.MI.SS.US')),
(12, 'Karl', 'Berry', to_timestamp('2013-05-26 14.47.57.62', 'YYYY-MM-DD HH24.MI.SS.US')),
(13, 'Uma', 'Wood', to_timestamp('2013-05-26 14.47.57.62', 'YYYY-MM-DD HH24.MI.SS.US')),
(14, 'Vivien', 'Bergen', to_timestamp('2013-05-26 14.47.57.62', 'YYYY-MM-DD HH24.MI.SS.US')),
(snip)
後はターゲットDBに流せばテーブルの移行完了ですね。
6.DBUnitのテストデータとしてエクスポート
XMLとしてデータをエクスポートするとDBUnit対応のフラットXMLを生成してくれます。
Model画面の左上で「To」をXMLに変えて「Export」をクリック。
SQLエクスポートと同じ過程を踏んでDBUnitが使えるテストデータXMLが出来てしまいました。
<?xml version="1.0" encoding="windows-31j"?>
<!--
generated by Jailer 8.8.1, Sun Jul 28 14:46:36 JST 2019 from naka@phemt
Extraction Model: all rows from rental (file:/C:/Users/naka/Desktop/jailer/tmp/em-14-46-08-072.jm)
Source DBMS: PostgreSQL
Target DBMS: PostgreSQL
Database URL: jdbc:postgresql://192.168.0.4:5432/dvdrental
Database User: devel
Exported Rows: 44815
actor 200
address 603
category 16
city 600
country 109
customer 599
film 1000
film_actor 5462
film_category 1000
inventory 4581
language 1
payment 14596
rental 16044
staff 2
store 2
-->
<rowset>
<actor>
<!--columns of actor as T-->
<actor_id>1</actor_id>
<first_name>Penelope</first_name>
<last_name>Guiness</last_name>
<last_update>2013-05-26-14.47.57</last_update>
</actor>
<actor>
<!--columns of actor as T-->
<actor_id>2</actor_id>
<first_name>Nick</first_name>
<last_name>Wahlberg</last_name>
<last_update>2013-05-26-14.47.57</last_update>
</actor>
<actor>
<!--columns of actor as T-->
<actor_id>3</actor_id>
<first_name>Ed</first_name>
(snip)
SQLエクスポートと同じようにwhere条件を付けられるので、大きなDBから小さくデータを抽出してテストデータを作るなんてことも出来たりします。
足りない機能は他ツールで補う
0からのテストデータ生成なんかは出来ないですが、Jailerの趣旨と違うみたいですし、他ツールで代替するなり、エクスポートされたデータのレコードを増やすなりすれば対処できます。
ちょっとイイ感じのDB開発ツールを探している方はツールの一つに加えてみては如何でしょうか。