| Crates.io | synthdb |
| lib.rs | synthdb |
| version | 0.1.3 |
| created_at | 2025-11-24 07:13:50.955865+00 |
| updated_at | 2025-11-24 15:09:44.58441+00 |
| description | The Universal Database Seeder. Production-grade synthetic data generator for PostgreSQL. Zero config, context-aware. |
| homepage | https://github.com/synthdb/synthdb |
| repository | https://github.com/synthdb/synthdb |
| max_upload_size | |
| id | 1947489 |
| size | 148,982 |
Features β’ Quick Start β’ Examples β’ Contributing
SynthDB is a next-generation database seeding engine that reads your existing PostgreSQL schema and generates statistically realistic, relational data automatically.
Unlike traditional tools that generate random gibberish, SynthDB employs a Deep Semantic Engine to understand your data model's context and relationships, producing data that looks and feels real.
-- Instead of this garbage:
INSERT INTO users VALUES ('XJ9K2', 'asdf@qwerty', '99999', 'ZZZ');
-- SynthDB generates this:
INSERT INTO users VALUES ('John Doe', 'john.doe@techcorp.com', '+1-555-0142', 'San Francisco, CA');
SynthDB understands the meaning of your columns, not just their types.
If a table has first_name, last_name, and email, SynthDB ensures they match perfectly:
Automatically detects and generates valid data across multiple domains:
|
π° Finance
π Geography
π¬ Science
|
π» Technology
π’ Business
π± Personal
|
Automatically analyzes foreign key dependencies and inserts data in the correct order:
Users β Orders β OrderItems β Shipments
Generated foreign keys always reference valid, existing parent rows. No orphaned records, ever.
-- Parent record created first
INSERT INTO customers (id, name) VALUES (1, 'Acme Corp');
-- Child record references existing parent
INSERT INTO orders (id, customer_id, total) VALUES (101, 1, 1299.99);
| Feature | Description |
|---|---|
| Strict Precision | Respects NUMERIC(10,2), VARCHAR(15), and all constraint types |
| Smart Nulls | Intelligently applies NULL values to optional fields while keeping critical data populated |
| Unique Constraints | Guarantees uniqueness for columns with UNIQUE or PRIMARY KEY constraints |
| Check Constraints | Honors CHECK constraints and enum types |
| Zero Configuration | No YAML files, no mapping rules. Just point it at your database |
| Performance | Written in Rust π¦ for blazing-fast data generation |
# Via Cargo
cargo install synthdb
Step 1: Create a target database with your schema (tables must exist)
Step 2: Run SynthDB
synthdb clone \
--url "postgres://user:pass@localhost:5432/my_staging_db" \
--rows 1000 \
--output seed.sql
Step 3: Apply the generated data
psql -d my_staging_db -f seed.sql
# Generate data directly to database (no SQL file)
synthdb clone --url "postgres://..." --rows 5000 --execute
# Specify custom row counts per table
synthdb clone --url "postgres://..." --config counts.json
# Exclude specific tables
synthdb clone --url "postgres://..." --exclude "logs,temp_*"
# Set data locale
synthdb clone --url "postgres://..." --locale "en_GB"
| Column Name | Generated Value | Logic |
|---|---|---|
merchant_name |
'Acme Corporation' |
π’ Detected Company entity |
support_email |
'support@acmecorp.com' |
π§ Matched to Company Name |
mac_address |
'00:1A:2B:3C:4D:5E' |
π§ Valid hexadecimal format |
ipv6_address |
'2001:0db8:85a3::8a2e:0370' |
π Valid IPv6 format |
contract_value |
45021.50 |
π― Respected NUMERIC(10,2) |
tracking_code |
'TRK-9281-A02' |
π― Semantic ID generation |
audit_log_path |
'/var/logs/audit/2024-11.log' |
π Context-aware file path |
birth_date |
'1985-06-15' |
π Realistic age distribution |
website_url |
'https://acmecorp.com' |
π Matched to company domain |
-- Your existing schema
CREATE TABLE companies (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
website VARCHAR(255),
industry VARCHAR(50)
);
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
company_id INTEGER REFERENCES companies(id),
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
phone VARCHAR(20),
job_title VARCHAR(100),
salary NUMERIC(10,2),
hire_date DATE NOT NULL
);
SynthDB generates:
-- Coherent company data
INSERT INTO companies VALUES
(1, 'TechVision Solutions', 'https://techvision.io', 'Software'),
(2, 'Global Logistics Inc', 'https://globallogistics.com', 'Transportation');
-- Employees with matching company context
INSERT INTO employees VALUES
(1, 1, 'Alice', 'Chen', 'alice.chen@techvision.io', '+1-555-0123', 'Senior Software Engineer', 125000.00, '2022-03-15'),
(2, 1, 'Bob', 'Kumar', 'bob.kumar@techvision.io', '+1-555-0124', 'Product Manager', 135000.00, '2021-08-22'),
(3, 2, 'Carol', 'Rodriguez', 'carol.rodriguez@globallogistics.com', '+1-555-0198', 'Operations Director', 145000.00, '2020-01-10');
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SynthDB Engine β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 1. Schema Introspection β
β ββ Read tables, columns, constraints, relationships β
β β
β 2. Dependency Analysis β
β ββ Build dependency graph via topological sort β
β β
β 3. Semantic Classification β
β ββ Detect column meaning from names & types β
β β
β 4. Context-Aware Generation β
β ββ Generate coherent, relational data β
β β
β 5. Constraint Validation β
β ββ Ensure all DB constraints are satisfied β
β β
β 6. Output β
β ββ SQL file or direct database insertion β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
We love Rustaceans! π¦ Contributions are welcome and appreciated.
git checkout -b feature/amazing-feature
cargo fmt
cargo clippy
cargo test
git commit -m 'Add amazing feature'
git push origin feature/amazing-feature
# Clone the repository
git clone https://github.com/yourusername/synthdb.git
cd synthdb
# Build the project
cargo build
# Run tests
cargo test
# Run with example
cargo run -- clone --url "postgres://localhost/testdb" --rows 100
Please read our Code of Conduct before contributing.
Built with β€οΈ using:
Distributed under the MIT License. See LICENSE for more information.
If SynthDB helps your project, consider giving it a β on GitHub!
Made with π¦ by the SynthDB team