pgmold 0.33.6

PostgreSQL schema-as-code management tool
Documentation
---
title: Adopting pgmold
description: Baseline an existing database and start managing it with pgmold
---

Use `pgmold dump` to create a baseline from a live database, then manage all future changes through SQL files.

## Create a baseline

```bash
# Export current database schema to SQL
pgmold dump -d postgres://localhost/mydb -o schema/baseline.sql

# For specific schemas only
pgmold dump -d postgres://localhost/mydb --target-schemas public,auth -o schema/baseline.sql

# Split into multiple files by object type
pgmold dump -d postgres://localhost/mydb --split -o schema/
```

The `--split` option creates separate files for extensions, types, sequences, tables, functions, views, triggers, and policies.

After this, your schema files match the database exactly and `pgmold plan` shows zero operations.

## Workflow after baseline

1. **Make changes** by editing the SQL schema files
2. **Preview** with `pgmold plan -s sql:schema/ -d postgres://localhost/mydb`
3. **Apply** with `pgmold apply -s sql:schema/ -d postgres://localhost/mydb`

## Integrating with existing migration systems

pgmold is declarative — it computes diffs and applies directly. To maintain compatibility with an existing migration system:

```bash
# Generate a numbered migration file automatically
pgmold migrate \
  -s sql:schema/ \
  -d postgres://localhost/mydb \
  --migrations ./migrations \
  --name "add_email_column"
# Creates: migrations/0044_add_email_column.sql

# Or manually capture output
pgmold diff --from sql:current.sql --to sql:schema/ > migrations/0044_my_change.sql
```

The `migrate` command auto-detects the next migration number. Use pgmold for diffing while keeping your existing migration runner.