{ pkgs, config, ... }: 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"; }; }; }