99 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { config, pkgs, ... }:
 | |
| {
 | |
|   services.postgresql = {
 | |
|     enable = true;
 | |
|     package = pkgs.postgresql_15;
 | |
|     enableTCPIP = true;
 | |
| 
 | |
|     dataDir = "/data/postgresql";
 | |
| 
 | |
|     authentication = ''
 | |
|       host all all 129.241.210.128/25 md5
 | |
|       host all all 2001:700:300:1900::/64 md5
 | |
|     '';
 | |
| 
 | |
|     # Hilsen https://pgconfigurator.cybertec-postgresql.com/
 | |
|     settings = {
 | |
|       # Connectivity
 | |
|       max_connections = 500;
 | |
|       superuser_reserved_connections = 3;
 | |
| 
 | |
|       # Memory Settings
 | |
|       shared_buffers = "8192 MB";
 | |
|       work_mem = "32 MB";
 | |
|       maintenance_work_mem = "420 MB";
 | |
|       effective_cache_size = "22 GB";
 | |
|       effective_io_concurrency = 100;
 | |
|       random_page_cost = 1.25;
 | |
| 
 | |
|       # Monitoring
 | |
|       shared_preload_libraries = "pg_stat_statements";
 | |
|       track_io_timing = true;
 | |
|       track_functions = "pl";
 | |
| 
 | |
|       # Replication
 | |
|       wal_level = "replica";
 | |
|       max_wal_senders = 0;
 | |
|       synchronous_commit = false;
 | |
| 
 | |
|       # Checkpointing:
 | |
|       checkpoint_timeout = "15 min";
 | |
|       checkpoint_completion_target = 0.9;
 | |
|       max_wal_size = "1024 MB";
 | |
|       min_wal_size = "512 MB";
 | |
| 
 | |
|       # WAL writing
 | |
|       wal_compression = true;
 | |
|       wal_buffers = -1;
 | |
| 
 | |
|       # Background writer
 | |
|       bgwriter_delay = "200ms";
 | |
|       bgwriter_lru_maxpages = 100;
 | |
|       bgwriter_lru_multiplier = 2.0;
 | |
|       bgwriter_flush_after = 0;
 | |
| 
 | |
|       # Parallel queries:
 | |
|       max_worker_processes = 8;
 | |
|       max_parallel_workers_per_gather = 4;
 | |
|       max_parallel_maintenance_workers = 4;
 | |
|       max_parallel_workers = 8;
 | |
|       parallel_leader_participation = true;
 | |
| 
 | |
|       # Advanced features
 | |
|       enable_partitionwise_join = true;
 | |
|       enable_partitionwise_aggregate = true;
 | |
|       max_slot_wal_keep_size = "1000 MB";
 | |
|       track_wal_io_timing = true;
 | |
|       maintenance_io_concurrency = 100;
 | |
|       wal_recycle = true;
 | |
| 
 | |
|       # SSL
 | |
|       ssl = true;
 | |
|       ssl_cert_file = "/run/credentials/postgresql.service/cert";
 | |
|       ssl_key_file = "/run/credentials/postgresql.service/key";
 | |
|     };
 | |
|   };
 | |
| 
 | |
|   systemd.services.postgresql.serviceConfig = {
 | |
|     LoadCredential = [
 | |
|       "cert:/etc/certs/postgres.crt"
 | |
|       "key:/etc/certs/postgres.key"
 | |
|     ];
 | |
|   };
 | |
| 
 | |
|   environment.snakeoil-certs."/etc/certs/postgres" = {
 | |
|     owner = "postgres";
 | |
|     group = "postgres";
 | |
|     subject = "/C=NO/O=Programvareverkstedet/CN=postgres.pvv.ntnu.no/emailAddress=drift@pvv.ntnu.no";
 | |
|   };
 | |
| 
 | |
|   networking.firewall.allowedTCPPorts = [ 5432 ];
 | |
|   networking.firewall.allowedUDPPorts = [ 5432 ];
 | |
| 
 | |
|   services.postgresqlBackup = {
 | |
|     enable = true;
 | |
|     location = "/var/lib/postgres/backups";
 | |
|     backupAll = true;
 | |
|   };
 | |
| }
 |