EddytorDocs & API

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 bundled Postgres and Garage are single-replica, no HA, no backups. Fine for a demo, wrong for data you care about. Use managed, backed-up datastores in production.

The two datastores

Bundled (eval)External (production)
Postgrespostgres.bundled=true (Helm) / the compose postgres serviceManaged Postgres - put the conn string in EDDYTOR_DATABASE_URL
Object storegarage.bundled=true / the compose garage serviceYour 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

  1. Provision a managed Postgres (RDS, Cloud SQL, Azure Flexible Server, …).
  2. Put its connection string in the secret / .env as EDDYTOR_DATABASE_URL.
  3. TLS is usually required - append ?sslmode=require (managed Postgres rejects or discourages plaintext).
  4. Leave postgres.bundled=false (the default on Helm).

Heads up

On Kubernetes, leave 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.

Next

On this page