Arenile works with SQLite (default) or PostgreSQL, with the same code and the same guarantees: every
integration and concurrency test runs on both.
SQLite (default)
One file (/data/arenile.db) in WAL mode, no extra service to run, backups with one command. Ideal for one or a
few establishments: a whole beach, with desk, beach staff and online bookings at the same time, is a light load
for SQLite.
PostgreSQL
Recommended with many establishments in the same installation, with several Arenile instances in parallel, or
if you already have a managed PostgreSQL with backups and monitoring. Enabled with DATABASE_URL.
No double selling on either: the uniqueness of a spot per date and slot is a database constraint, and
quantity counters use conditional updates, identical in both dialects.
Same features, same APIs, same migrations (one pair for each schema version).
Calendar dates as YYYY-MM-DD, instants in UTC, amounts in integer cents.
Moving an existing installation is not automatic. The safest way is to do it off season: export the data you
need, start a new installation on PostgreSQL and re-create the configuration. If you run a single beach, staying
on SQLite is almost always the best choice.