DBI でつないで graphviz する
ファイル名とか画像サイズとかハードコードしてますが、だいたいうごきます。
昔つくった DBIx::Inspector ってやつをつかってます。
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use 5.010000;
use autodie;
use DBI;
use DBIx::Inspector;
use GraphViz;
use Data::Dumper;
my $dbh = DBI->connect(@ARGV);
my $inspector = DBIx::Inspector->new(dbh => $dbh);
my $graph = GraphViz->new( width => 20, height => 5,
pagewidth => 25, pageheight => 91);
for my $table ($inspector->tables) {
say $table->name;
$graph->add_node($table->name);
for my $fk ($table->pk_foreign_keys) {
printf " %-30s => %s\n", ($fk->fktable_name . '.' . $fk->fkcolumn_name), ($fk->pktable_name .'.'. $fk->pkcolumn_name);
$graph->add_edge($fk->pktable_name, $fk->fktable_name, label => $fk->fkcolumn_name);
}
print "\n";
}
$graph->as_png('out.png');
なお Graphviz::DBI ってのもあるんですが、fk をまともにあつかえないので意味ないです。
関連
Published: 2012-09-06(Thu) 09:52