{ pkgs, ... }: # let # cfg = config.services.postgresql; # in { services.postgresql = { enable = true; package = pkgs.postgresql_16; enableJIT = true; # Settings taken from [PGTune](https://pgtune.leopard.in.ua/) settings = { max_connections = "300"; shared_buffers = "2GB"; effective_cache_size = "6GB"; maintenance_work_mem = "512MB"; checkpoint_completion_target = 0.9; wal_buffers = "16MB"; default_statistics_target = 100; random_page_cost = 4; effective_io_concurrency = 2; work_mem = "2621kB"; huge_pages = "off"; min_wal_size = "1GB"; max_wal_size = "4GB"; max_worker_processes = 8; max_parallel_workers_per_gather = 4; max_parallel_workers = 8; max_parallel_maintenance_workers = 4; }; }; # systemd.timers.pg-autovacuum = { # description = "Timer for Postgres Autovacuum"; # timerConfig = { # OnCalendar = "*-*-* 01:00:00"; # Unit = "pg-autovacuum.service"; # }; # }; # systemd.services.pg-autovacuum = { # description = "Vacuum all Postgres databases."; # requisite = [ "postgresql.service" ]; # wantedBy = [ "multi-user.target" ]; # serviceConfig = { # Type = "oneshot"; # User = "postgres"; # Group = "postgres"; # SyslogIdentifier = "pg-autovacuum"; # ExecStart = "${cfg.package}/bin/vacuumdb --all --echo --jobs=6 --parallel=5 --analyze --verbose"; # }; # }; }