Merge pull request #42133 from markuskowa/pgbackup
nixos/pgbackup: Fix and refactor the postgres backup module
This commit is contained in:
commit
d63cb0695f
@ -200,6 +200,12 @@ with lib;
|
|||||||
(mkRenamedOptionModule [ "fonts" "fontconfig" "ultimate" "forceAutohint" ] [ "fonts" "fontconfig" "forceAutohint" ])
|
(mkRenamedOptionModule [ "fonts" "fontconfig" "ultimate" "forceAutohint" ] [ "fonts" "fontconfig" "forceAutohint" ])
|
||||||
(mkRenamedOptionModule [ "fonts" "fontconfig" "ultimate" "renderMonoTTFAsBitmap" ] [ "fonts" "fontconfig" "renderMonoTTFAsBitmap" ])
|
(mkRenamedOptionModule [ "fonts" "fontconfig" "ultimate" "renderMonoTTFAsBitmap" ] [ "fonts" "fontconfig" "renderMonoTTFAsBitmap" ])
|
||||||
|
|
||||||
|
# postgresqlBackup
|
||||||
|
(mkRemovedOptionModule [ "services" "postgresqlBackup" "period" ] ''
|
||||||
|
A systemd timer is now used instead of cron.
|
||||||
|
The starting time can be configured via <literal>services.postgresqlBackup.startAt</literal>.
|
||||||
|
'')
|
||||||
|
|
||||||
# Profile splitting
|
# Profile splitting
|
||||||
(mkRenamedOptionModule [ "virtualization" "growPartition" ] [ "boot" "growPartition" ])
|
(mkRenamedOptionModule [ "virtualization" "growPartition" ] [ "boot" "growPartition" ])
|
||||||
|
|
||||||
|
@ -3,18 +3,41 @@
|
|||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
let
|
let
|
||||||
inherit (pkgs) gzip;
|
|
||||||
|
|
||||||
location = config.services.postgresqlBackup.location;
|
cfg = config.services.postgresqlBackup;
|
||||||
|
|
||||||
postgresqlBackupCron = db:
|
postgresqlBackupService = db :
|
||||||
''
|
{
|
||||||
${config.services.postgresqlBackup.period} root ${config.services.postgresql.package}/bin/pg_dump ${db} | ${gzip}/bin/gzip -c > ${location}/${db}.gz
|
enable = true;
|
||||||
|
|
||||||
|
description = "Backup of database ${db}";
|
||||||
|
|
||||||
|
requires = [ "postgresql.service" ];
|
||||||
|
|
||||||
|
preStart = ''
|
||||||
|
mkdir -m 0700 -p ${cfg.location}
|
||||||
|
chown postgres ${cfg.location}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
in
|
script = ''
|
||||||
|
if [ -e ${cfg.location}/${db}.sql.gz ]; then
|
||||||
|
${pkgs.coreutils}/bin/mv ${cfg.location}/${db}.sql.gz ${cfg.location}/${db}.prev.sql.gz
|
||||||
|
fi
|
||||||
|
|
||||||
{
|
${config.services.postgresql.package}/bin/pg_dump ${cfg.pgdumpOptions} ${db} | \
|
||||||
|
${pkgs.gzip}/bin/gzip -c > ${cfg.location}/${db}.sql.gz
|
||||||
|
'';
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
PermissionsStartOnly = "true";
|
||||||
|
User = "postgres";
|
||||||
|
};
|
||||||
|
|
||||||
|
startAt = cfg.startAt;
|
||||||
|
};
|
||||||
|
|
||||||
|
in {
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
||||||
@ -27,10 +50,10 @@ in
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
period = mkOption {
|
startAt = mkOption {
|
||||||
default = "15 01 * * *";
|
default = "*-*-* 01:15:00";
|
||||||
description = ''
|
description = ''
|
||||||
This option defines (in the format used by cron) when the
|
This option defines (see <literal>systemd.time</literal> for format) when the
|
||||||
databases should be dumped.
|
databases should be dumped.
|
||||||
The default is to update at 01:15 (at night) every day.
|
The default is to update at 01:15 (at night) every day.
|
||||||
'';
|
'';
|
||||||
@ -49,18 +72,23 @@ in
|
|||||||
Location to put the gzipped PostgreSQL database dumps.
|
Location to put the gzipped PostgreSQL database dumps.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pgdumpOptions = mkOption {
|
||||||
|
type = types.string;
|
||||||
|
default = "-Cbo";
|
||||||
|
description = ''
|
||||||
|
Command line options for pg_dump.
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf config.services.postgresqlBackup.enable {
|
config = mkIf config.services.postgresqlBackup.enable {
|
||||||
services.cron.systemCronJobs = map postgresqlBackupCron config.services.postgresqlBackup.databases;
|
|
||||||
|
|
||||||
system.activationScripts.postgresqlBackup = stringAfter [ "stdio" "users" ]
|
systemd.services = listToAttrs (map (db : {
|
||||||
''
|
name = "postgresqlBackup-${db}";
|
||||||
mkdir -m 0700 -p ${config.services.postgresqlBackup.location}
|
value = postgresqlBackupService db; } ) cfg.databases);
|
||||||
chown root ${config.services.postgresqlBackup.location}
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,9 @@ let
|
|||||||
{
|
{
|
||||||
services.postgresql.package=postgresql-package;
|
services.postgresql.package=postgresql-package;
|
||||||
services.postgresql.enable = true;
|
services.postgresql.enable = true;
|
||||||
|
|
||||||
|
services.postgresqlBackup.enable = true;
|
||||||
|
services.postgresqlBackup.databases = [ "postgres" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
testScript = ''
|
testScript = ''
|
||||||
@ -46,6 +49,10 @@ let
|
|||||||
$machine->succeed(check_count("SELECT * FROM sth;", 5));
|
$machine->succeed(check_count("SELECT * FROM sth;", 5));
|
||||||
$machine->fail(check_count("SELECT * FROM sth;", 4));
|
$machine->fail(check_count("SELECT * FROM sth;", 4));
|
||||||
$machine->succeed(check_count("SELECT xpath(\'/test/text()\', doc) FROM xmltest;", 1));
|
$machine->succeed(check_count("SELECT xpath(\'/test/text()\', doc) FROM xmltest;", 1));
|
||||||
|
|
||||||
|
# Check backup service
|
||||||
|
$machine->succeed("systemctl start postgresqlBackup-postgres.service");
|
||||||
|
$machine->succeed("zcat /var/backup/postgresql/postgres.sql.gz | grep '<test>ok</test>'");
|
||||||
$machine->shutdown;
|
$machine->shutdown;
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user