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 - single-replica, no HA, no backups. Fine for a demo, wrong for data you care about: for anything you keep, bring your own managed, backed-up datastores.
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).
On Kubernetes, leave waitForDb.enabled=false (the default) for an external DB -
Install the chart explains why.
Azure adds one more step: allow-list the citext + pgcrypto extensions before
first boot - 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 at init - prefer managed Postgres, or see the chart gotchas for the capability patch.