Skip to main content
The internal PostgreSQL option is not intended for production use. It provides no high-availability, automated backups, or enterprise-grade reliability features. Always use an external managed PostgreSQL service (AWS RDS, Azure Database, Google Cloud SQL, etc.) for production deployments.
postgres.enabled
boolean
default:"false"
Enable or disable the built-in PostgreSQL subchart deployment.Values:
  • true - Deploy PostgreSQL as a StatefulSet in the cluster
  • false - Use external PostgreSQL database
When Enabled: The chart creates:
  • PostgreSQL StatefulSet with 1 replica
  • PersistentVolumeClaim for data storage
  • ClusterIP Service at <fullname>-postgres:5432
  • Automatic DB_HOST environment variable configuration
When Disabled: You must configure external database connection parameters:
  • envVars.DB_HOST
  • envVars.DB_PORT
  • envVars.DB_USER
  • envVars.POSTGRES_DB
  • envVars.POSTGRES_CABLE_DB
  • secrets.DB_PASSWORD
postgres.reset
boolean
default:"false"
Danger Zone: When set to true, recreates the PostgreSQL data volume on next deployment, permanently deleting all data.
Use Cases:
  • Development environment reset
  • Testing clean installations
  • Never use in production
postgres.fullnameOverride
string
default:"crewai-postgres"
Override the full name used for PostgreSQL resources.Purpose: Controls the naming of PostgreSQL StatefulSet, Service, and other resources.Default: "crewai-postgres"Impact:
  • Service DNS name: <fullnameOverride>.namespace.svc.cluster.local
  • StatefulSet name: <fullnameOverride>
  • PVC name: data-<fullnameOverride>-0
When to Override:
  • Deploying multiple PostgreSQL instances in same namespace
  • Specific naming requirements
  • Avoiding name conflicts
Note: Changing this value after initial deployment may cause resource recreation.
postgres.image.host
string
default:""
Container registry hosting the PostgreSQL image.Default: "" (empty) - Automatically uses global.imageRegistry valueFallback Behavior:When postgres.image.host is empty or not set, the chart uses global.imageRegistry via the crewai-platform.postgresImageRegistry template helper. This allows you to configure the registry once at the global level.When imageNamePrefixOverride is Set:The image name is automatically simplified:
  • Original: proxy/crewai/dockerhub/library/postgres
  • With imageNamePrefixOverride: "crewai/" becomes: crewai/postgres
See global.imageNamePrefixOverride for details.Example:
global:
  imageRegistry: "registry.company.com"

postgres:
  enabled: true
  image:
    host: "" # Automatically uses registry.company.com
    name: "proxy/crewai/dockerhub/library/postgres"
    tag: "16"
postgres.image.name
string
default:"proxy/crewai/dockerhub/library/postgres"
PostgreSQL container image name.Default: "proxy/crewai/dockerhub/library/postgres" - Matches Replicated proxy path structurePath Transformation:When global.imageNamePrefixOverride is set, only the final component (postgres) is used with the override prefix.
postgres.image.tag
string
default:"16"
PostgreSQL version to deploy.Supported Version: PostgreSQL 16Upgrade Consideration: PostgreSQL major version upgrades require data migration. Do not change this value without planning for database migration.
postgres.image.pullPolicy
string
default:"IfNotPresent"
Image pull policy for PostgreSQL container.
postgres.image.pullSecret
string
default:""
Image pull secret for PostgreSQL image. If empty, uses the global image.pullSecret.
postgres.database
string
default:"crewai_plus_production"
Name of the primary PostgreSQL database created during initialization.
postgres.cableDatabase
string
default:"crewai_plus_cable_production"
Name of the ActionCable database for WebSocket connections.Purpose: Rails ActionCable uses a separate database for pub/sub operations to isolate real-time communication from primary data operations.
postgres.oauthDatabase
string
default:"oauth_db"
Name of the Built-in Integrations service database for third-party integration token storage.Purpose: The Built-in Integrations service uses a separate database to store encrypted OAuth tokens for third-party integrations (Gmail, Google Calendar, Microsoft Outlook, etc.).Auto-Creation: When postgres.enabled: true and oauth.enabled: true, this database is automatically created during PostgreSQL initialization via an init script.Database Isolation: OAuth tokens are stored separately from the main application data for security and isolation.Default: "oauth_db"Related Configuration:
postgres.persistence.size
string
default:"10Gi"
Size of the persistent volume for PostgreSQL data.Sizing Guidelines:
  • Small deployment (< 100 users): 10-20Gi
  • Medium deployment (100-500 users): 50-100Gi
  • Large deployment (> 500 users): 100Gi+
Note: This value cannot be decreased after initial deployment. Plan for growth.
postgres.persistence.reclaimPolicy
string
default:"keep"
PersistentVolume reclaim policy when the PVC is deleted.Valid Values:
  • "keep" - Retain volume data after PVC deletion (recommended)
  • "delete" - Delete volume data when PVC is deleted
postgres.persistence.storageClassName
string
default:""
Kubernetes StorageClass to use for the persistent volume.Common Values:
  • "" - Use default StorageClass
  • "gp3" - AWS EBS GP3 volumes
  • "managed-premium" - Azure Premium SSD
  • "standard-rwo" - GKE Standard persistent disk
Performance Consideration: Use SSD-backed storage classes for better database performance.

postgres.resources.*

Resource limits and requests for PostgreSQL container.
postgres.resources.limits.cpu
string
default:"1"
CPU limit for PostgreSQL pod.Sizing Guidelines:
  • Small deployment: "1"
  • Medium deployment: "2"
  • Large deployment: "4" or higher
postgres.resources.limits.memory
string
default:"2Gi"
Memory limit for PostgreSQL pod.Sizing Guidelines:
  • Small deployment: "2Gi"
  • Medium deployment: "4Gi"
  • Large deployment: "8Gi" or higher
postgres.resources.requests.cpu
string
default:"500m"
Guaranteed CPU allocation for PostgreSQL pod.
postgres.resources.requests.memory
string
default:"1Gi"
Guaranteed memory allocation for PostgreSQL pod.
postgres.nodeSelector
object
default:"{}"
Kubernetes node selector for PostgreSQL pod placement.Example:
postgres:
  nodeSelector:
    node-role.kubernetes.io/database: "true"
    topology.kubernetes.io/zone: us-west-2a
Use Cases:
  • Pin database to specific nodes with fast local storage
  • Ensure database runs in specific availability zones
  • Separate database workload from application workload