Skip to main content
Your app’s database needs are auto-detected. Postgres is provisioned automatically and DATABASE_URL is injected as an environment variable — no manual setup, no dashboard clicking.

How it works

  1. Database usage in your project is detected (Prisma schema, SQLAlchemy models, Drizzle config, etc.)
  2. A per-app Postgres schema is provisioned on a shared Cloud SQL instance
  3. DATABASE_URL is injected as an environment variable on deploy
  4. Connection pooling is handled via PgBouncer
No provisioning commands needed. Deploy and your database is ready.

Check database info

floo services info postgres --app my-app
Service: postgres (managed)
  Status:   active
  Host:     floo-db-abc123.us-central1.cloudsql.com
  Port:     5432
  Database: floo_my-app-uuid

DATABASE_URL is injected as an environment variable.

Access connection string

floo env get DATABASE_URL --app my-app

Supported ORMs

A standard DATABASE_URL is injected. Works with any ORM:
LanguageORMUsage
Node.jsPrismadatasource db { url = env("DATABASE_URL") }
Node.jsDrizzleconst db = drizzle(process.env.DATABASE_URL)
PythonSQLAlchemycreate_engine(os.environ["DATABASE_URL"])
PythonDjangoDATABASES = {"default": dj_database_url.config()}
Gopgxpgx.Connect(ctx, os.Getenv("DATABASE_URL"))

Limits

  • Query timeout: 5–30 seconds (configurable)
  • Connection pool: managed by PgBouncer
  • Storage: scales with your plan

For agents

# Check database status
floo services info postgres --app my-app --json 2>/dev/null | jq '.data'

# Get connection string
floo env get DATABASE_URL --app my-app --json 2>/dev/null | jq -r '.data.value'
Agents can provision a full-stack app with a database in one flow:
floo deploy --json                                                        # Deploy app (DB auto-provisioned)
floo services info postgres --app my-app --json 2>/dev/null | jq '.data'  # Verify DB is ready
floo logs --app my-app --json --tail 5                                    # Check for connection errors