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

執筆者:

関連記事

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

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

ERROR: Several keys given – pgcrypto does not handle keyring、またはERROR: Corrupt ascii-armor

gpgキーストアに同じUIDで複数の鍵ペアを登録してしまうと、ファイルにexportした際に1ファイルに複数の鍵情報が入ってしまい、1ファイル1鍵を期待しているpgcryptoに怒られます。 目次1 …

スタンドアロンモードのPgAdmin4が開くデフォルトブラウザを変更

PostgreSQL公式GUIクライアントツールの「PgAdmin4」。 PostGISのgeometry型をWeb地図上に表示出来たり、サーバモードで起動すればチーム内で共通的に使えるPostgre …

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

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

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

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

 

shingo.nakanishi
 

東京在勤、1977年生まれ、IT職歴2n年、生涯現役技術者を目指しています。健康第一。