1{ pkgs, ... }:
2# let
3# cfg = config.services.postgresql;
4# in
5{
6 services.postgresql = {
7 enable = true;
8 package = pkgs.postgresql_16;
9 enableJIT = true;
10 # Settings taken from [PGTune](https://pgtune.leopard.in.ua/)
11 settings = {
12 max_connections = "300";
13 shared_buffers = "2GB";
14 effective_cache_size = "6GB";
15 maintenance_work_mem = "512MB";
16 checkpoint_completion_target = 0.9;
17 wal_buffers = "16MB";
18 default_statistics_target = 100;
19 random_page_cost = 4;
20 effective_io_concurrency = 2;
21 work_mem = "2621kB";
22 huge_pages = "off";
23 min_wal_size = "1GB";
24 max_wal_size = "4GB";
25 max_worker_processes = 8;
26 max_parallel_workers_per_gather = 4;
27 max_parallel_workers = 8;
28 max_parallel_maintenance_workers = 4;
29 };
30 };
31 # systemd.timers.pg-autovacuum = {
32 # description = "Timer for Postgres Autovacuum";
33 # timerConfig = {
34 # OnCalendar = "*-*-* 01:00:00";
35 # Unit = "pg-autovacuum.service";
36 # };
37 # };
38 # systemd.services.pg-autovacuum = {
39 # description = "Vacuum all Postgres databases.";
40 # requisite = [ "postgresql.service" ];
41 # wantedBy = [ "multi-user.target" ];
42 # serviceConfig = {
43 # Type = "oneshot";
44 # User = "postgres";
45 # Group = "postgres";
46 # SyslogIdentifier = "pg-autovacuum";
47 # ExecStart = "${cfg.package}/bin/vacuumdb --all --echo --jobs=6 --parallel=5 --analyze --verbose";
48 # };
49 # };
50}