Bundled vs external Postgres & object store
The bundled datastores are evaluation-only - when and how to graduate to managed ones.
Eddytor can run two datastores for you - Postgres (its metadata) and an object store (Garage, where Delta tables live). Both are bundled for evaluation only. For anything you keep, bring your own.
Heads up
The two datastores
| Bundled (eval) | External (production) | |
|---|---|---|
| Postgres | postgres.bundled=true (Helm) / the compose postgres service | Managed Postgres - put the conn string in EDDYTOR_DATABASE_URL |
| Object store | garage.bundled=true / the compose garage service | Your S3 / GCS / Azure Blob - register it after install |
Postgres holds Eddytor's metadata (users, storage connections, encrypted secrets) - never your table data. Your table data always lives in the object store.
Graduating Postgres
- Provision a managed Postgres (RDS, Cloud SQL, Azure Flexible Server, …).
- Put its connection string in the secret /
.envasEDDYTOR_DATABASE_URL. - TLS is usually required - append
?sslmode=require(managed Postgres rejects or discourages plaintext). - Leave
postgres.bundled=false(the default on Helm).
Heads up
waitForDb.enabled=false for an
external DB. The chart's wait-for-db init container probes the bundled
Service name eddytor-postgres, so with an external DB it loops forever and pods
stay Init. The server runs its own preflight + advisory-locked migration
anyway. (waitForDb is only meaningful - and auto-forced on - with bundled
Postgres.)Azure adds one more step: allow-list the citext + pgcrypto extensions
before first boot (az postgres flexible-server parameter set --name azure.extensions --value citext,pgcrypto), or migration 0 fails. See
AKS.
Graduating the object store
Leave garage.bundled=false and register a real bucket after install - see
Connect Storage for S3, GCS, and Azure Blob, including
keyless options (IRSA on EKS, Workload Identity on GKE, managed identity on AKS).
A note on CSI volumes
Bundled Postgres on a real cloud disk (azuredisk / EBS / GCE PD) can crash-loop
with chown: Operation not permitted, because the chart drops Linux
capabilities the volume needs at init. Prefer managed Postgres; if you must keep
bundled, patch the StatefulSet to add CHOWN,FOWNER,DAC_OVERRIDE,SETGID,SETUID.
Local hostPath clusters don't hit this.