Environment:FlowiseAI Flowise Database Environment
| Knowledge Sources | |
|---|---|
| Domains | Infrastructure, Database |
| Last Updated | 2026-02-12 07:30 GMT |
Overview
Database environment supporting SQLite (default), PostgreSQL, MySQL, or MariaDB as the persistence layer for Flowise.
Description
Flowise uses TypeORM as its ORM layer, supporting four database backends. SQLite is the default for zero-configuration local development, storing data in `~/.flowise/database.sqlite`. For production deployments, PostgreSQL or MySQL/MariaDB are recommended. The database stores chatflows, agentflows, credentials (encrypted), chat messages, document stores, evaluation data, and user/workspace configurations.
Usage
Use this environment when deploying Flowise with a specific database backend. The default SQLite requires no additional setup. Switch to PostgreSQL or MySQL for production deployments requiring concurrent access, better performance at scale, or managed database services.
System Requirements
| Category | Requirement | Notes |
|---|---|---|
| SQLite | No external server needed | File-based; stored at DATABASE_PATH (default: `~/.flowise`) |
| PostgreSQL | PostgreSQL 12+ server | Driver: `pg` ^8.11.1; Default port: 5432 |
| MySQL | MySQL 5.7+ or 8.x server | Driver: `mysql2` ^3.11.3; Default port: 3306; Charset: utf8mb4 |
| MariaDB | MariaDB 10.3+ server | Driver: `mysql2` ^3.11.3; Default port: 3306; Charset: utf8mb4 |
Dependencies
Node.js Packages
- `typeorm` >= 0.3.6 — ORM framework with migration support
- `sqlite3` >= 5.1.6 — SQLite driver (default)
- `pg` >= 8.11.1 — PostgreSQL driver
- `mysql2` >= 3.11.3 — MySQL/MariaDB driver
Credentials
The following environment variables configure database access:
- `DATABASE_TYPE`: Backend selection: `sqlite` | `postgres` | `mysql` | `mariadb` (default: `sqlite`)
- `DATABASE_PATH`: SQLite file directory (default: `~/.flowise`)
- `DATABASE_HOST`: Database server hostname (for non-SQLite)
- `DATABASE_PORT`: Database server port (MySQL: `3306`, PostgreSQL: `5432`)
- `DATABASE_NAME`: Database name
- `DATABASE_USER`: Database username
- `DATABASE_PASSWORD`: Database password
- `DATABASE_SSL`: Enable SSL connection (default: `false`)
- `DATABASE_SSL_KEY_BASE64`: SSL certificate in base64 encoding
- `DATABASE_REJECT_UNAUTHORIZED`: Reject unauthorized SSL certificates (default: `false`)
Quick Install
# SQLite (default - no setup needed)
# Just start Flowise; it creates ~/.flowise/database.sqlite automatically
# PostgreSQL setup
export DATABASE_TYPE=postgres
export DATABASE_HOST=localhost
export DATABASE_PORT=5432
export DATABASE_NAME=flowise
export DATABASE_USER=flowise
export DATABASE_PASSWORD=your_password
# MySQL setup
export DATABASE_TYPE=mysql
export DATABASE_HOST=localhost
export DATABASE_PORT=3306
export DATABASE_NAME=flowise
export DATABASE_USER=flowise
export DATABASE_PASSWORD=your_password
Code Evidence
Database type selection from `docker/docker-compose.yml:11-19`:
# DATABASE
- DATABASE_PATH=${DATABASE_PATH}
- DATABASE_TYPE=${DATABASE_TYPE}
- DATABASE_PORT=${DATABASE_PORT}
- DATABASE_HOST=${DATABASE_HOST}
- DATABASE_NAME=${DATABASE_NAME}
- DATABASE_USER=${DATABASE_USER}
- DATABASE_PASSWORD=${DATABASE_PASSWORD}
- DATABASE_SSL=${DATABASE_SSL}
- DATABASE_SSL_KEY_BASE64=${DATABASE_SSL_KEY_BASE64}
LONGTEXT migration for MySQL/MariaDB (preventing data loss) from `database/migrations/mysql/1765000000000-FixDocumentStoreFileChunkLongText.ts:10`:
// WARNING: Reverting to TEXT may cause data loss if content exceeds the 64KB limit.
Storage type fallback from `packages/server/src/utils/index.ts:1925`:
const storageType = process.env.STORAGE_TYPE ? process.env.STORAGE_TYPE : 'local'
Common Errors
| Error Message | Cause | Solution |
|---|---|---|
| `SQLITE_BUSY: database is locked` | Multiple processes accessing SQLite concurrently | Switch to PostgreSQL or MySQL for multi-process/queue mode |
| `ER_DATA_TOO_LONG` (MySQL) | Document chunk content exceeds TEXT column limit | Ensure migration `1765000000000-FixDocumentStoreFileChunkLongText` has run (upgrades TEXT to LONGTEXT) |
| `ECONNREFUSED` to database host | Database server unreachable | Verify DATABASE_HOST and DATABASE_PORT; check network/firewall rules |
| `relation "chat_flow" does not exist` (PostgreSQL) | Migrations not applied | TypeORM runs migrations automatically on startup; check for migration errors in logs |
Compatibility Notes
- SQLite: Not recommended for queue mode (MODE=queue) as it does not support concurrent writes well; use PostgreSQL or MySQL instead
- MySQL LONGTEXT: A migration exists to upgrade `document_store_file_chunk` columns from TEXT (64KB limit) to LONGTEXT to prevent data loss with large document chunks
- PostgreSQL SSL: Set `DATABASE_SSL=true` and provide `DATABASE_SSL_KEY_BASE64` for cloud-hosted databases (AWS RDS, Azure, etc.)
- Connection pooling: TypeORM manages connection pools internally with a 120-second idle timeout