From 0d7f05e56d6b96402889f15a4c3ee98698396500 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Thu, 21 May 2026 03:30:45 +0900 Subject: [PATCH] bicep/postgres: add cleanup timers --- .../services/postgresql/cleanup-timers.nix | 37 +++++++++++++++++++ hosts/bicep/services/postgresql/default.nix | 6 ++- 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 hosts/bicep/services/postgresql/cleanup-timers.nix 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 = ''