PostgreSQL

「Jailer Database Tool」でDB関連作業を効率化

投稿日:2019年7月31日

開発時のデータベースクライアントは何を使っていますか?

「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開発ツールを探している方はツールの一つに加えてみては如何でしょうか。

-PostgreSQL
-

執筆者:

関連記事

pgcryptoで公開鍵暗号の動作確認

共通鍵暗号で暗号化されたデータはパスワードが漏洩すると復号される危険が高まるのに対し、公開鍵暗号で暗号化されたデータは秘密鍵とパスワードの二つが漏洩しないと復号できません。 APサーバとDBサーバ通信 …

開発用PostgreSQLをCentOSにインストールしてSQLを流すまで

開発や勉強に使う為のPostgreSQLをCentOSにインストールします。 インストールから基本操作を体験して、0からデータベースを構築する経験を積んでおきます。 目次1 環境2 インストール手順を …

PostgreSQL11に一般ユーザ権限でサンプルDB「dvdrental」をpg_restore

データベースインストール後にサンプルデータを投入することで、DBをバックエンドにして動作する他ミドルの検証が楽になったりすることがあります。 それぞれのデータベースで代表的なサンプルデータセットの存在 …

GitLab Omunibus版のPostgreSQLに普通のpsqlコマンドで接続

GitLab Omunibus版でインストールされるビルトインPostgreSQLは、 TCP:5432ではなくホスト内でしか接続出来ないUnix Domain Socketで待機ローカルホストからO …

BIツール「metabase」でサンプルDB「dvdrental」をグラフ化する

「売り上げやユーザ増加傾向をDBから抽出して上役に報告したりチームで共有したい」 資料を作る為にSQLを流して、結果をコピーして、Excelに張り付けて、グラフ化して・・・結構面倒で骨が折れます。間違 …

 

shingo.nakanishi
 

東京在勤、1977年生まれ、IT職歴2n年、生涯技術者として楽しく生きることを目指しています。デスマに負けず健康第一。