Skip to content

Adopting pgmold

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

Terminal window
# 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.

  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

Section titled “Integrating with existing migration systems”

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

Terminal window
# 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.