Skip to main content

Generate SVG Entity Relationship Diagrams from PostgreSQL database dump files

Project description

pypgsvg - Lightweight PostgreSQL ERD Generator

pypgsvg is a lightweight Python tool that generates a JS/CSS/SVG interactive Entity Relationship Diagrams (ERDs) from PostgreSQL schema dump files. With only Graphviz as a dependency, manually run or place in CI/CD pipelines, fast rapid deployment verification scenarios.

๐Ÿ“ฆ Installation

Lightweight setup - only 2 steps:

  1. Install pypgsvg:

    pip install pypgsvg
    
  2. Install Graphviz (external dependency):

    • macOS: brew install graphviz
    • Ubuntu/Debian: sudo apt-get install graphviz
    • CentOS/RHEL: sudo yum install graphviz
    • Windows: Download from Graphviz.org

That's it! Ready for deployment.


๐ŸŽฌ Quick Demo

[๐ŸŽฏ View Interactive Example]

Try it yourself:

# Download sample and generate interactive ERD
wget https://github.com/blackburnd/pypgsvg/raw/main/Samples/complex_schema.dump
pypgsvg schema.dump --output demo_erd --view

๐Ÿ› ๏ธ Enterprise Usage

Quick Start - Schema Analysis

# Generate interactive ERD from schema dump
pypgsvg schema.dump --output database_erd --view

# Enterprise automation (CI/CD ready)
pypgsvg Samples/complex_schema.dump --output Samples/complex_schema --rankdir LR --node-sep 4

Advanced Enterprise Options

# Large schema optimization
pypgsvg Samples/complex_schema.dump --output Samples/complex_schema --rankdir LR --node-sep 4
source venv/bin/activate && python -m src.pypgsvg Samples/complex_schema.dump --node-shape=ellipse --show-standalone=false --output=./Samples/complex_schema --rankdir LR --node-sep 2 --packmode


# Custom layout for documentation
pypgsvg schema.dump --rankdir LR --fontsize 20 --node-fontsize 16 --output presentation_erd

Usage

Get Your PostgreSQL Schema

If you don't have a schema dump, generate one with pg_dump:

# Standard schema export (most common)
pg_dump -h your-host -d database -U username -s --no-owner --no-privileges > schema.dump

# Comprehensive export with triggers and functions
pg_dump -h your-host -d database -U username -s -O -F plain --disable-triggers --encoding=UTF8 > schema.dump

Or use our sample schema for testing.

Interactive ERD Generation

Basic usage:

pypgsvg schema.dump --output my_database_erd --view

Usage:

pypgsvg schema.dump \
  --output docs/database_architecture \
  --rankdir TB \
  --node-sep 4 \
  --packmode graph \
  --rank-sep 3 \
  --hide-standalone

The generated SVG includes:

  • ๐Ÿ–ฑ๏ธ Interactive selection - Click tables/edges to view SQL details
  • ๐Ÿ“ฑ Miniature navigator - Overview panel for large schemas
  • ๐Ÿ“‹ Copy/download tools - Export selected elements
  • ๐ŸŽจ Resizable panels - Customize your workspace
  • โŒจ๏ธ Keyboard shortcuts - ESC/R to reset view

Note: For full interactivity, open the SVG file locally in your browser. GitHub restricts JavaScript for security.

Scriptable API

Perfect for automation and enterprise workflows:

from pypgsvg import parse_sql_dump, generate_erd_with_graphviz

# Parse schema dump
with open("schema.dump", "r", encoding='utf-8') as file:
    sql_content = file.read()

# Extract database structure  
tables, foreign_keys, triggers, errors = parse_sql_dump(sql_content)

# Generate interactive ERD
if not errors:
    generate_erd_with_graphviz(
        tables=tables,
        foreign_keys=foreign_keys, 
        output_file="enterprise_diagram",
        rankdir='TB',
        packmode='graph'
    )
    print("โœ… Enterprise ERD generated successfully!")
else:
    print("โš ๏ธ Parsing errors:", errors)

โš™๏ธ Complete Command-Line Reference

Core Arguments

Argument Type Default Description
input_file Required - Path to the PostgreSQL dump file
-o, --output String schema_erd Output file name (without extension)
--view Flag false Open the generated SVG in a browser
--show-standalone String true Show/hide tables with no foreign key relationships

Layout & Positioning

Argument Type Default Options Description
--packmode String array array, cluster, graph Graphviz packmode - Controls how components are packed together
--rankdir String TB TB, LR, BT, RL Graphviz rankdir - Graph direction (Top-Bottom, Left-Right, etc.)
--esep String 8 Any number Graphviz esep - Edge separation distance in points
--node-sep String 0.5 Any number Graphviz nodesep - Minimum distance between nodes
--rank-sep String 1.2 Any number Graphviz ranksep - Distance between ranks/levels

Typography & Styling

Argument Type Default Description
--fontname String Arial Font family for all text elements
--fontsize Integer 18 Font size for graph title/labels
--node-fontsize Integer 14 Font size for table names and column text
--edge-fontsize Integer 12 Font size for relationship labels
--node-style String rounded,filled Graphviz node style (e.g., filled, rounded,filled)
--node-shape String rect Graphviz node shape (e.g., rect, ellipse, box)

Color & Visual Enhancement

Argument Type Default Description
--saturate Float 1.8 Color saturation multiplier for table backgrounds
--brightness Float 1.0 Brightness adjustment for table colors

Understanding Graphviz Parameters

Packmode Options

  • array (default): Tables arranged in a regular grid pattern
  • cluster: Groups related tables together spatially
  • graph: Optimizes overall graph layout, best for complex schemas

Rankdir Options

  • TB (Top-Bottom): Traditional vertical flow, tables flow downward
  • LR (Left-Right): Horizontal flow, good for wide displays
  • BT (Bottom-Top): Reverse vertical flow
  • RL (Right-Left): Reverse horizontal flow

Distance Parameters

  • esep: Controls spacing between edges (relationship lines)
  • node-sep: Minimum distance between table nodes
  • rank-sep: Distance between different levels/ranks of tables

Advanced Filtering

Tables are automatically excluded based on common patterns:

  • Views: vw_*, *_view
  • Temporary: *_temp, *_tmp, temp_*
  • Backup: *_bk, *_backup, *_old
  • Audit/Log: *_log, *_audit, audit_*
  • Duplicates: *_dups, *_duplicates
  • Archives: *_archive, archive_*

Use --show-standalone false to hide tables with no foreign key relationships.


๐ŸŽฏ Interactive Components

The generated SVG includes several interactive panels that can be moved, resized, and minimized:

๐Ÿ“Š Metadata Panel

Displays comprehensive information about your database schema:

  • Schema statistics (table count, columns, relationships)
  • Generation parameters used
  • File information and timestamps
  • Interactive controls (minimize, close, drag to reposition)

Metadata Panel

๐Ÿ—บ๏ธ Miniature Overview

Navigate large schemas effortlessly:

  • Interactive minimap with viewport indicator
  • Click to jump to specific schema areas
  • Drag viewport for precise navigation
  • Resizable panel - make it larger for detailed navigation

Overview Panel

๐Ÿ” Selection Details

View and export detailed SQL information:

  • Table definitions with column details and constraints
  • Foreign key relationships with full SQL syntax
  • Trigger information including execution details
  • Copy button for instant clipboard access
  • Download button for formatted text export
  • Enterprise-friendly emoji-free output option

Selection Panel Example selection output:

๐Ÿ“Š Selected Tables
==================
public_franchises
public_association_map
public_ecommerce
...

๐Ÿ”— Foreign Key Relationships  
============================
๐Ÿ”‘ franchise_id โ†’ id
ALTER TABLE ONLY public.association_map
    ADD CONSTRAINT association_map_franchise_id_fkey 
    FOREIGN KEY (franchise_id) REFERENCES public.franchises(id) 
    ON DELETE CASCADE;

For detailed testing instructions, see the Testing Guide.

Quality metrics:

  • โœ… 95%+ code coverage
  • โœ… 70+ comprehensive tests
  • โœ… Cross-platform compatibility

๐Ÿ—๏ธ Architecture & Performance

Lightweight Design

๐Ÿ“ฆ pypgsvg/
โ”œโ”€โ”€ ๐Ÿ Pure Python core (~450 lines)
โ”œโ”€โ”€ ๐ŸŽจ CSS styling (~200 lines)  
โ”œโ”€โ”€ โšก JavaScript interactivity (~2000 lines)
โ”œโ”€โ”€ ๐Ÿงช Comprehensive tests (~1000+ lines)
โ””โ”€โ”€ ๐Ÿ“š Zero runtime dependencies (except Graphviz)

Performance characteristics:

  • Fast parsing - Processes large schemas in seconds
  • Memory efficient - Minimal footprint for enterprise deployment
  • Scalable output - Handles schemas with hundreds of tables
  • Quick startup - No database connections or heavy frameworks

Enterprise-Ready Features

  • ๐Ÿ”’ Security-focused - No network requirements, processes local files only
  • ๐Ÿ“‹ Audit-friendly - Deterministic output for version control
  • ๐Ÿš€ Container-ready - Minimal Docker image size
  • โš™๏ธ Configurable - Extensive customization options
  • ๐Ÿ“Š Monitoring - Built-in error reporting and validation

โš™๏ธ Configuration & Customization

Advanced Layout Options

# Horizontal layout for wide displays
pypgsvg schema.dump --rankdir LR --node-sep 3 --rank-sep 2

# Compact layout for presentations  
pypgsvg schema.dump --packmode graph --fontsize 16 --node-fontsize 14

# Large schema optimization
pypgsvg schema.dump --hide-standalone --esep 8 --rank-sep 4

Table Filtering (Automatic)

Enterprise-focused exclusions for cleaner diagrams:

  • Views (vw_*) - Database views
  • Backup tables (*_bk, *_backup) - Temporary backup data
  • Utility tables (*_temp, *_tmp) - Temporary processing tables
  • Log tables (*_log, *_audit) - Audit and logging tables
  • Duplicate tables (*_dups, *_duplicates) - Data cleanup tables
  • Version tables (*_old, *_archive) - Historical data tables

Color & Accessibility

  • WCAG-compliant color palette with proper contrast ratios
  • Automatic text color calculation for readability
  • Color-blind friendly palette selection
  • High-contrast mode for professional presentations


๐Ÿšจ Error Handling & Reliability

Error management:

  • Graceful degradation - Continues processing despite individual parsing errors
  • Detailed error reporting - Specific line numbers and context
  • Encoding resilience - Handles various character encodings
  • Malformed SQL recovery - Attempts to extract partial information
  • Validation checks - Ensures output integrity

Logging:

# Built-in error collection for monitoring
tables, foreign_keys, triggers, errors = parse_sql_dump(sql_content)

if errors:
    for error in errors:
        log.warning(f"Schema parsing issue: {error}")
    # Continue with partial results

๐Ÿค Contributing

Welcome users and contributors:

  1. Code quality - Follow PEP 8 and maintain >95% test coverage
  2. Enterprise focus - Consider automation and deployment scenarios
  3. Performance - Optimize for large schemas and CI/CD usage
  4. Documentation - Update examples for enterprise use cases
  5. Testing - Add tests for new SQL patterns and edge cases

Required

  • Python 3.8+ (standard in most enterprise environments)
  • Graphviz (system package, widely available)

Development/Testing Only

  • Node.js/npm - Required for running browser tests only
  • pytest>=7.0.0 - Testing framework
  • pytest-cov>=4.0.0 - Coverage reporting
  • playwright>=1.37.0 - Browser testing framework

Development Setup

Quick Install (From Source)

If you're cloning the repository for development, use the automated installer:

# Clone the repository
git clone https://github.com/blackburnd/pypgsvg.git
cd pypgsvg

# Run the automated installer
./install.sh

The installer will:

  • Detect your operating system (macOS, Ubuntu/Debian, CentOS/RHEL)
  • Install Graphviz system package
  • Install Node.js and npm
  • Create Python virtual environment
  • Install Python dependencies
  • Install Playwright browser binaries

Supported platforms: macOS (with Homebrew), Ubuntu/Debian, CentOS/RHEL

Manual Setup

If the automated installer doesn't support your system:

# 1. Install system dependencies
brew install graphviz node  # macOS
# or
sudo apt-get install graphviz nodejs npm  # Ubuntu/Debian

# 2. Create virtual environment and install Python dependencies
python3 -m venv venv
source venv/bin/activate
pip install -e ".[test]"

# 3. Install Playwright browsers
npx playwright install

Testing

The project includes both unit tests (Python) and functional tests (browser-based).

Quick Start

Use the provided test runner script which handles environment setup:

# Run unit tests
./run-tests.sh

# Run browser tests
./run-tests.sh --browser

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pypgsvg-1.2.2.tar.gz (1.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pypgsvg-1.2.2-py3-none-any.whl (48.0 kB view details)

Uploaded Python 3

File details

Details for the file pypgsvg-1.2.2.tar.gz.

File metadata

  • Download URL: pypgsvg-1.2.2.tar.gz
  • Upload date:
  • Size: 1.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pypgsvg-1.2.2.tar.gz
Algorithm Hash digest
SHA256 a99a47a3f3c826a7a23722fca617543d90a772b8d843d64f2d846e7d734f6e7b
MD5 7c31f0302d64fa4dc6a214ad2b77cb4e
BLAKE2b-256 219b1fc871fbd1ad9cc8f8ba5f1188ccb8f6f4941376f5a60f25d548be381e7c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypgsvg-1.2.2.tar.gz:

Publisher: publish.yml on blackburnd/pypgsvg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pypgsvg-1.2.2-py3-none-any.whl.

File metadata

  • Download URL: pypgsvg-1.2.2-py3-none-any.whl
  • Upload date:
  • Size: 48.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pypgsvg-1.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a267b6218433bd4c7c49ed2310cdf06434eb94b5984f11bec3a53940cab830a2
MD5 68f474b0701fab4f58525c07a6a38c48
BLAKE2b-256 535266744532ff678ef42156b43237e55081241f735a11b7014b3f16cbbab527

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypgsvg-1.2.2-py3-none-any.whl:

Publisher: publish.yml on blackburnd/pypgsvg

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page