Files

1.4 KiB

Database

n8n persists its state in a relational database, accessed through TypeORM. The schema supports both SQLite (the default) and PostgreSQL, and is defined by the migrations in @n8n/db rather than the entities (entities run with synchronize: false).

Schema reference

Auto-generated documentation of the schema, one set per supported database:

Each set lists every table with its columns, types, defaults, indexes, and foreign keys, plus a Mermaid ER diagram of the relationships. The two differ where the column types do (e.g. datetime vs timestamptz, text/simple-json vs json/jsonb, boolean representation).

How it's generated

The generator spins up an empty database, runs the full @n8n/db migration set against it, and points tbls at the result. SQLite uses a throwaway file; PostgreSQL uses a throwaway testcontainer, so Docker is required.

# Regenerate both (requires Docker; tbls locally via `brew install tbls`)
pnpm db:schema:docs

# Verify the committed docs match the current migrations
pnpm db:schema:check

The schema reference is auto-generated — do not edit by hand. CI fails when a migration changes the schema but the docs weren't regenerated; when that happens, run pnpm db:schema:docs and commit the result.