My go-to multi-write database server is postgres. I like how it has JSON columns and indexes in a (somewhat) ergonomic form. This is a pretty basic setup.
{ pkgs, ... }:
{
services.postgresql = {
enable = true;
package = pkgs.postgresql_14;
settings = {
wal_level = "replica";
archive_mode = "on";
archive_command = "test ! -f /srv/pgsql/archive/wal/%f && cp %p /srv/pgsql/archive/wal/%f";
statement_timeout = 60*1000;
};
};
# backup weekly
services.postgresqlBackup = {
enable = true;
backupAll = true;
location = "/srv/pgsql/backups/";
startAt = "Mon *-*-* 02:00:00";
};
}