One IT Thing

IT業界を楽しむ為の学習系雑記

PostgreSQL

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

投稿日:2019年7月31日 更新日:

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

「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
-

執筆者:

関連記事

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

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

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

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

開発用PostgreSQLをインストールした後の外部接続、ユーザ作成、認証周りの設定

ローカル開発用にPostgreSQLを入れた後、開発や分析をし易くする為に外部ホストからパスワード付き接続出来るようにしていきます。 また、postgresスーパーユーザは権限が強すぎて開発アプリから …

PostgreSQL エポックタイムカラムを今月初~今月末で範囲検索

エポックタイムは1970年1月1日 0時0分0秒から現在までの秒数。 PostgreSQLではこれを人間に読みやすいTIMESTAMP型(’2019-09-04 00:00:00&#821 …

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

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


shingo nakanishi。東京で消耗中の職歴20年越え中年ITエンジニアです。「生涯現役プログラマを楽しむ」ことができる働き方探しをライフワークにしています。

19歳(1996年)から書き始めた個人日記が5,000日を超え、残りの人生は発信をして行きたいと思い、令和元日からこのサイトを開始しました。勉強と試行錯誤をしながら、自分が経験したIT関連情報を投稿しています。