Upgrade & backup
Upgrade, roll back, and back up a NocoDB Helm deployment on Kubernetes.
Before you upgrade
- Read the release notes for the target version.
- Back up PostgreSQL (snapshot or
pg_dump). This is your rollback safety net.
Always back up the database before a major upgrade. Schema migrations run automatically on pod
startup and are not reversed by helm rollback.
Upgrade
helm upgrade nocodb oci://ghcr.io/nocodb/charts/nocodb --version <new-version> \
-n nocodb -f values.yaml --waitThe app uses an ordered rollout (maxSurge: 1, maxUnavailable: 0): the first new pod runs any
schema migrations (serialized by a migration lock), and the rest start once they complete. The
generous startup probe prevents pods from being killed mid-migration.
For a major upgrade you can be extra cautious by temporarily scaling the app to one replica first:
helm upgrade nocodb oci://ghcr.io/nocodb/charts/nocodb --version <new-version> \
-n nocodb -f values.yaml --set replicaCount=1 --wait
# once healthy, restore your normal replica countRoll back
helm history nocodb -n nocodb
helm rollback nocodb <revision> -n nocodb --waitThe auto-generated JWT secret and datasource encryption key are never rotated by upgrades (they
carry helm.sh/resource-policy: keep), so rollbacks do not invalidate sessions or stored
credentials. If a migration changed the schema, restore your database backup to fully revert.
Backup & restore
- PostgreSQL: use your provider's snapshots or
pg_dump/pg_restore. This holds all NocoDB metadata. - S3: enable bucket versioning; attachments live here.
- See Backups for the general approach.
Troubleshooting
| Symptom | Likely cause |
|---|---|
Pod stuck 0/1 for minutes on first install | First-boot migrations running; the startup probe allows this |
NocoDB requires Redis... at install | replicaCount>1 or worker.enabled, and externalRedis not configured |
| Attachments missing on some requests | Object storage not configured; set up an S3-compatible Storage plugin in the App Store |
| New pods not picking up env changes | Values delivered via extraEnvVars or an external Secret are not tracked by the config checksum; restart the rollout with kubectl rollout restart or re-run helm upgrade |