diff --git a/hosts/bicep/services/postgresql/cleanup-timers.nix b/hosts/bicep/services/postgresql/cleanup-timers.nix new file mode 100644 index 0000000..a88bf26 --- /dev/null +++ b/hosts/bicep/services/postgresql/cleanup-timers.nix @@ -0,0 +1,37 @@ +{ config, lib, pkgs, ... }: +let + cfg = config.services.postgresql; +in +{ + config = lib.mkIf cfg.enable { + systemd.services = { + postgresql-repack = { + requires = [ "postgresql.service" ]; + after = [ "postgresql.target" ]; + description = "Repack all PostgreSQL databases"; + startAt = "Mon 06:00:00"; + serviceConfig = { + Type = "oneshot"; + User = "postgres"; + Group = "postgres"; + + ExecStart = "${lib.getExe cfg.package.pkgs.pg_repack} --port=${builtins.toString cfg.settings.port} --all"; + }; + }; + + postgresql-vacuum-analyze = { + requires = [ "postgresql.service" ]; + after = [ "postgresql.target" ]; + description = "Vacuum and analyze all PostgreSQL databases"; + startAt = "Tue 06:00:00"; + serviceConfig = { + Type = "oneshot"; + User = "postgres"; + Group = "postgres"; + + ExecStart = "${lib.getExe' cfg.package "psql"} --port=${builtins.toString cfg.settings.port} -tAc 'VACUUM ANALYZE'"; + }; + }; + }; + }; +} diff --git a/hosts/bicep/services/postgresql/default.nix b/hosts/bicep/services/postgresql/default.nix index 9e8ce45..fadadfa 100644 --- a/hosts/bicep/services/postgresql/default.nix +++ b/hosts/bicep/services/postgresql/default.nix @@ -3,11 +3,15 @@ let cfg = config.services.postgresql; in { - imports = [ ./backup.nix ]; + imports = [ + ./backup.nix + ./cleanup-timers.nix + ]; services.postgresql = { enable = true; package = pkgs.postgresql_18; + extensions = ps: with ps; [ pg_repack ]; enableTCPIP = true; authentication = ''