PlantERD
ERD exporter with PlantUML and mermaid format
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 (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
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 PostgreSQLplant_erd-oracle
: for Oracle
plant_erd-oracle
Setup for 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)
- Go to https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html
- Download
instantclient-basic-windows.x64-19.5.0.0.0dbru.zip
orinstantclient-basiclite-windows.x64-19.5.0.0.0dbru.zip
- Extract zip
- Move
plant_erd-oracle
to same directory asoci.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
--table
and --distance
About 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 2: Output only tables within a distance of 1 from the articles
$ ./plant_erd sqlite3 --table articles --distance 1
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.