Database
Quick reference for importing / exporting Postgres data and managing Payload migrations.
Import database
- Restore the latest production dump from
./datainto your localPOSTGRES_URL:
pnpm db:restore:latest- Optional format flags:
--sqlor--binary. - The restore script resets the
publicschema first (DROP SCHEMA ... CASCADE), so this is destructive for the target DB.
Export database
This can only be done if you have admin credentials. Ask Gijs/Camil. Export source/production DB (from SOURCE_POSTGRES_*) to ./data:
pnpm db:dump:production- Optional flags (both scripts):
--sql/--binary--repo-safe/--no-repo-safe--max-git-file-mb=95--chunk-size-mb=95
Repo-safe mode compresses large dumps (.xz/.gz) and can split them into .part-* chunks so they can go into github.com (max 100MB).
Payload migrations
If you want changes to the production database you need to work with migrations. To create a migration start with the latest db + migrations then run pnpm payload:migrate:create. This file needs to be checked into git and part of your PR.
Common commands:
pnpm payload:migrate
pnpm payload:migrate:status
pnpm payload:migrate:create
pnpm payload:migrate:downPayload migrations docs: https://payloadcms.com/docs/database/migrations
Also available: payload:migrate:refresh, payload:migrate:reset, payload:migrate:fresh.
Quirks / gotchas
- Locally you can make changes to the database and interact with console to create tables/columns. When you're done create a migration
- Local dev commonly uses Drizzle
pushmode. Do not mix that local push workflow with running migrations against the same local DB. - Double check your migration against latest dump. So:
- pnpm db:restore:latest
- pnpm payload:migrate
- pnpm payload:migrate:create -> should be empty
- Create migrations after finishing a coherent schema change, then review generated files before committing.