add postgresql backup hooks
This commit is contained in:
2
clanModules/postgresql/README.md
Normal file
2
clanModules/postgresql/README.md
Normal file
@@ -0,0 +1,2 @@
|
||||
A free and open-source relational database management system (RDBMS) emphasizing extensibility and SQL compliance.
|
||||
---
|
||||
52
clanModules/postgresql/default.nix
Normal file
52
clanModules/postgresql/default.nix
Normal file
@@ -0,0 +1,52 @@
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
let
|
||||
createDatatbaseState =
|
||||
db:
|
||||
let
|
||||
folder = "/var/backup/postgresql/${db}";
|
||||
curFile = "${folder}/dump.sql.zstd";
|
||||
prevFile = "${folder}/dump.sql.prev.zstd";
|
||||
inProgressFile = "${folder}/dump.sql.in-progress.zstd";
|
||||
in
|
||||
{
|
||||
folders = [ folder ];
|
||||
preBackupCommand = ''
|
||||
(
|
||||
umask 0077 # ensure backup is only readable by postgres user
|
||||
if [ -e ${curFile} ]; then
|
||||
mv ${curFile} ${prevFile}
|
||||
fi
|
||||
pg_dump -C ${db} | \
|
||||
${pkgs.zstd}/bin/zstd --rsyncable | \
|
||||
> ${inProgressFile}
|
||||
mv ${inProgressFile} ${curFile}
|
||||
)
|
||||
'';
|
||||
postRestoreCommand = ''
|
||||
if [[ -f ${prevFile} ]]; then
|
||||
zstd --decompress --stdout ${prevFile} | psql -d ${db}
|
||||
fi
|
||||
'';
|
||||
};
|
||||
in
|
||||
{
|
||||
options.clan.postgresl = {
|
||||
databases = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.str;
|
||||
default = [ "clan" ];
|
||||
};
|
||||
};
|
||||
config = {
|
||||
services.postgresql.enable = true;
|
||||
clanCore.state = lib.listToAttrs (
|
||||
builtins.map (
|
||||
db: lib.nameValuePair "postgresql-${db}" (createDatatbaseState db)
|
||||
) config.clan.postgresl.databases
|
||||
);
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user