One IT Thing

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

PostgreSQL

ER図自動生成ツール「SchemaSpy」でdvdrentalを可視化

投稿日:

SchemaSpyを使うとDBからデータを吸い上げてテーブルの相関をビジュアライズしてくれます。

本来ER図からDDLを生成出来るようにしておくべきで、出来れば使わない方がいいチート系のツールですがCIサイクルに取り入れて前向きなチェック用途で使われるこも多いかと思います。

参画したプロジェクトやサポートに行ったプロジェクトでER図を見せてもらおうとしたら「メンテされてないと思うので不正確ですが」とか前置きされると「え・・・あー、じゃあ参考までに頂けますか?」みたいな感じで取りあえず貰ったりします。

こういったプロジェクトでDB構成がどうなっているのか正確に現状把握したい場合は、DBからER図をリバース生成して、最新の状況を「正」として見た方が間違いが無い可能性が高いです。足りない情報はメンテされていない設計書を見て補完する、とかで対応。

やっぱり漏れを発見したら、本来のER図を修正なり指摘してあげるとかすれば、困っている人達から有難がられたりするボーナスも付いてきます。

以下の記事で入れたPostgreSQL公式サンプルデータ「dvdrental」のER図をSchemaSpyを使って作ります。

SchemaSpyとは

Java製のER図自動生成ツール。

構築環境

  • Windows 10
  • JDK 8以上
  • CentOS 7にdvdrentalが入ったPostgreSQL 11がある状態
  • PostgreSQLは外部ホストからdevelユーザ、devel#123パスワードで接続出来る状態

schemaspyをダウンロード

公式からjarファイルをダウンロード。
今回はschemaspy-6.0.0.jarをC:\toolsに配置。
http://schemaspy.org/

graphvizをインストール

ShemaSpyはダイアグラム画像を生成する為に「Graphviz」を使用します。Doxygenなんかでも使うアレですね。

Graphvizをダウンロードしてインストールします。2.3.8のmsiを使ってWindows10にインストール。
(schemaspy6.1.0からはvizjsで代替する為、Graphvisのインストールは不要になるとのことです)
https://schemaspy.readthedocs.io/en/latest/installation.html

Graphvizは自身にPATHを通してくれないので「C:\Program Files (x86)\Graphviz2.38\bin」にPATHを通しておきます。これでSchemaspyがGraphvizのdot.exeを使えるようになります。

ちょっと面倒ですが、6.1.0が出るまでの辛抱ですね。

PostgreSQLのJDBCドライバをダウンロード

PostgreSQLにJDBC接続する為のドライバをダウンロード。
「PostgreSQL JDBC 4.2 Driver, 42.2.6」を同じくC:\toolsに配置。
https://jdbc.postgresql.org/download.html

ER図を作成

C:\toolsから以下のコマンドを実行。

java -jar schemaspy-6.0.0.jar -t pgsql -dp .\postgresql-42.2.6.jar -db dvdrental -host 192.168.0.4 -port 5432 -s public -u devel -p devel#123 -o .\ER

C:\tools>java -jar schemaspy-6.0.0.jar -t pgsql -dp .\postgresql-42.2.6.jar -db dvdrental -host 192.168.0.4 -port 5432 -s public -u devel -p devel#123 -o .\ER
  ____       _                          ____
 / ___|  ___| |__   ___ _ __ ___   __ _/ ___| _ __  _   _
 \___ \ / __| '_ \ / _ \ '_ ` _ \ / _` \___ \| '_ \| | | |
  ___) | (__| | | |  __/ | | | | | (_| |___) | |_) | |_| |
 |____/ \___|_| |_|\___|_| |_| |_|\__,_|____/| .__/ \__, |
                                             |_|    |___/

                                              6.0.0

SchemaSpy generates an HTML representation of a database schema's relationships.
SchemaSpy comes with ABSOLUTELY NO WARRANTY.
SchemaSpy is free software and can be redistributed under the conditions of LGPL version 3 or later.
http://www.gnu.org/licenses/

INFO  - Starting Main v6.0.0 on phemt with PID 12056 (C:\tools\schemaspy-6.0.0.jar started by naka in C:\tools)
INFO  - The following profiles are active: default
INFO  - Started Main in 1.655 seconds (JVM running for 2.31)
INFO  - Configuration file not found
INFO  - Starting schema analysis
INFO  - Connected to PostgreSQL - 11.4
INFO  - Gathering schema details
Gathering schema details.........................(0sec)
Connecting relationships.........................(0sec)
Writing/graphing summary.INFO  - Gathered schema details in 0 seconds
INFO  - Writing/graphing summary
..............(2sec)
Writing/diagramming detailsINFO  - Completed summary in 2 seconds
INFO  - Writing/diagramming details
......................(7sec)
Wrote relationship details of 22 tables/views to directory '.\ER' in 11 seconds.
View the results by opening .\ER\index.html
INFO  - Wrote table details in 7 seconds
INFO  - Wrote relationship details of 22 tables/views to directory '.\ER' in 11 seconds.
INFO  - View the results by opening .\ER\index.html

C:\tools\ERにHTML資源がアウトプットされます。

(*)ここで以下のような接続エラーが出る場合は外部ホストからPotgreSQLに接続できる設定が出来ていません。

WARN  - Connection Failure

postgresql.conf、pg_hba.confを確認して外部から接続出来るようにし、PostgreSQLを再起動。

postgresql.conf

#listen_addresses = 'localhost'         # what IP address(es) to listen on;
listen_addresses = '0.0.0.0'            # what IP address(es) to listen on;

pg_hba.conf

# "local" is for Unix domain socket connections only
host    all             devel           192.168.0.0/24          md5
local   all             all                                     peer

動作確認

C:\tools\ER\index.htmlをダブルクリック。

上メニューからRelationshipsを選択して全体のER図が表示されることを確認します。

プロジェクト分析ツールの一環として

ドキュメントが整備されていなくてもDBのリレーションが一瞬で分かるようになりました。

DBはこれでざっくり把握して、プログラムの方はDoxygenでクラス図、呼び出し関連を把握、とかすると新規参画したプロジェクト成果物の把握が早まると思います。

-PostgreSQL
-,

執筆者:

関連記事

pgadmin4をCentOS7にインストールしてサーバモードで起動する手順

目次1 はじめに1.1 pgadmin3時代1.2 pgadmin4時代2 前提3 環境4 手順4.1 1.yumリポジトリ追加。pgdg(ポスグレ本家)、epel(python関連用)4.2 2.p …

pgcryptoの有効化と共通鍵暗号の動作確認

PostgreSQLで「pgcrypto」拡張機能を有効にすると、PostgreSQLに保存するデータを暗号化出来るようになります。 INSERTする際、共通鍵暗号はpgp_sym_encrypt関数 …

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

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

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

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

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

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


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

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