Skip to content

sue445/plant_erd

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PlantERD

ERD exporter with PlantUML and mermaid format

Build Status Build Status Coverage Status Maintainability Go Report Card

Example (PlantUML)

$ ./plant_erd sqlite3 --database /path/to/test_db.sqlite3

entity articles {
  * id : integer
  --
  * user_id : integer
  --
  index_user_id_on_articles (user_id)
}

entity users {
  * id : integer
  --
  name : text
}

articles }-- users

example-plantuml

Example (mermaid)

$ ./plant_erd sqlite3 --database /path/to/test_db.sqlite3 --format=mermaid --show-comment

erDiagram

articles {
  INTEGER id PK
  INTEGER user_id FK
}

users {
  INTEGER id PK
  TEXT name
}

users ||--o{ articles : owns
erDiagram

articles {
  INTEGER id PK
  INTEGER user_id FK
}

users {
  INTEGER id PK
  TEXT name
}

users ||--o{ articles : owns
Loading

Features

  • Output ERD from real database
  • Output ERD to stdout or file
  • Output only tables within a certain distance adjacent to each other with foreign keys from a specific table

Supported databases

  • SQLite3
  • MySQL: 5.6, 5.7, 8
  • PostgreSQL: 9, 10, 11, 12, 13, 14, 15
  • Oracle

Supported output formats

Setup

Download latest binary from https://github.com/sue445/plant_erd/releases and chmod 755

  • plant_erd : for SQLite3, MySQL and PostgreSQL
  • plant_erd-oracle : for Oracle

Setup for plant_erd-oracle

plant_erd-oracle requires Basic Package or Basic Light Package in Oracle Instant Client

Example (Linux)

mkdir -p /opt/oracle
wget --quiet --tries=0 https://download.oracle.com/otn_software/linux/instantclient/193000/instantclient-basiclite-linux.x64-19.3.0.0.0dbru.zip
unzip -q instantclient-basiclite-linux.x64-19.3.0.0.0dbru.zip -d /opt/oracle
export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_3

# for Ubuntu
apt-get update
apt-get install -y libaio1

Example (Mac)

See https://github.com/kubo/ruby-oci8/blob/master/docs/install-on-osx.md and install instantclient-basic or instantclient-basiclite

Example (Windows)

  1. Go to https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html
  2. Download instantclient-basic-windows.x64-19.5.0.0.0dbru.zip or instantclient-basiclite-windows.x64-19.5.0.0.0dbru.zip
  3. Extract zip
  4. Move plant_erd-oracle to same directory as oci.dll

Usage

SQLite3

$ ./plant_erd sqlite3 --help
NAME:
   plant_erd sqlite3 - Generate ERD from sqlite3

USAGE:
   plant_erd sqlite3 [command options] [arguments...]

OPTIONS:
   -d DISTANCE, --distance DISTANCE  Output only tables within a certain DISTANCE adjacent to each other with foreign keys from a specific table (default: 0)
   --database DATABASE               SQLite3 DATABASE file
   -f FILE, --file FILE              FILE for output (default: stdout)
   --format value                    Output format (plant_uml, mermaid. default:plant_uml)
   -i, --skip-index                  Whether don't print index to ERD. This option is used only --format=plant_uml
   -s value, --skip-table value      Skip generating table by using regex patterns
   --show-comment                    Show column comment. This option is used only --format=mermaid
   -t TABLE, --table TABLE           Output only tables within a certain distance adjacent to each other with foreign keys from a specific TABLE

MySQL

$ ./plant_erd mysql --help
NAME:
   plant_erd mysql - Generate ERD from mysql

USAGE:
   plant_erd mysql [command options] [arguments...]

OPTIONS:
   --collation COLLATION             MySQL COLLATION (default: "utf8_general_ci")
   -d DISTANCE, --distance DISTANCE  Output only tables within a certain DISTANCE adjacent to each other with foreign keys from a specific table (default: 0)
   --database DATABASE               MySQL DATABASE name
   -f FILE, --file FILE              FILE for output (default: stdout)
   --format value                    Output format (plant_uml, mermaid. default:plant_uml)
   --host HOST                       MySQL HOST (default: "localhost")
   -i, --skip-index                  Whether don't print index to ERD. This option is used only --format=plant_uml
   --password PASSWORD               MySQL PASSWORD [$MYSQL_PASSWORD]
   --port PORT                       MySQL PORT (default: 3306)
   -s value, --skip-table value      Skip generating table by using regex patterns
   --show-comment                    Show column comment. This option is used only --format=mermaid
   -t TABLE, --table TABLE           Output only tables within a certain distance adjacent to each other with foreign keys from a specific TABLE
   --user USER                       MySQL USER (default: "root")

PostgreSQL

$ ./plant_erd postgresql --help
NAME:
   plant_erd postgresql - Generate ERD from PostgreSQL

USAGE:
   plant_erd postgresql [command options] [arguments...]

OPTIONS:
   -d DISTANCE, --distance DISTANCE  Output only tables within a certain DISTANCE adjacent to each other with foreign keys from a specific table (default: 0)
   --database DATABASE               PostgreSQL DATABASE name
   -f FILE, --file FILE              FILE for output (default: stdout)
   --format value                    Output format (plant_uml, mermaid. default:plant_uml)
   --host HOST                       PostgreSQL HOST (default: "localhost")
   -i, --skip-index                  Whether don't print index to ERD. This option is used only --format=plant_uml
   --password PASSWORD               PostgreSQL PASSWORD [$POSTGRES_PASSWORD]
   --port PORT                       PostgreSQL PORT (default: 5432)
   -s value, --skip-table value      Skip generating table by using regex patterns
   --show-comment                    Show column comment. This option is used only --format=mermaid
   --sslmode SSLMODE                 PostgreSQL SSLMODE. c.f. https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-PARAMKEYWORDS (default: "disable")
   -t TABLE, --table TABLE           Output only tables within a certain distance adjacent to each other with foreign keys from a specific TABLE
   --user USER                       PostgreSQL USER

Oracle

$ ./plant_erd-oracle --help
NAME:
   plant_erd-oracle - ERD exporter with PlantUML and Mermaid format (for oracle)

USAGE:
   plant_erd-oracle [global options] command [command options] [arguments...]

VERSION:
   vX.X.X (build. xxxxxxx)

COMMANDS:
   help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   -f FILE, --file FILE              FILE for output (default: stdout)
   -t TABLE, --table TABLE           Output only tables within a certain distance adjacent to each other with foreign keys from a specific TABLE
   -d DISTANCE, --distance DISTANCE  Output only tables within a certain DISTANCE adjacent to each other with foreign keys from a specific table (default: 0)
   -i, --skip-index                  Whether don't print index to ERD. This option is used only --format=plant_uml
   -s value, --skip-table value      Skip generating table by using regex patterns
   --format value                    Output format (plant_uml, mermaid. default:plant_uml)
   --show-comment                    Show column comment. This option is used only --format=mermaid
   --user USER                       Oracle USER
   --password PASSWORD               Oracle PASSWORD [$ORACLE_PASSWORD]
   --host HOST                       Oracle HOST (default: "localhost")
   --port PORT                       Oracle PORT (default: 1521)
   --service SERVICE                 Oracle SERVICE name
   --help, -h                        show help
   --version, -v                     print the version

About --table and --distance

When --table and --distance are passed, output only tables within a certain distance adjacent to each other with foreign keys from a specific table.

Example 1: Output all tables

$ ./plant_erd sqlite3

example all

Example 2: Output only tables within a distance of 1 from the articles

$ ./plant_erd sqlite3 --table articles --distance 1

example distance 1 from articles

Testing

with all databases

Run test in container

docker-compose up --build --abort-on-container-exit

with only SQLite3

Run test on local

make test

License

The program is available as open source under the terms of the MIT License.

But plant_erd-oracle contains Oracle Instant Client. Oracle Instant Client is under OTN License.