# ============================================================================= # postgres/audit/postgresql.conf # PostgreSQL 15 configuration for the audit database. # Container memory limit: 1GB (lighter than FHIR store). # Workload: INSERT-heavy (audit events), occasional SELECT (analytics). # # For 1GB container: # shared_buffers = 256MB # effective_cache_size = 768MB # work_mem = 4MB # maintenance_work_mem = 100MB # ============================================================================= max_connections = 20 superuser_reserved_connections = 3 shared_buffers = 256MB effective_cache_size = 768MB work_mem = 4MB maintenance_work_mem = 100MB wal_buffers = 8MB checkpoint_completion_target = 0.9 synchronous_commit = on random_page_cost = 1.1 effective_io_concurrency = 200 # Logging log_destination = stderr logging_collector = off log_min_messages = WARNING log_min_error_statement = ERROR log_min_duration_statement = 500 log_line_prefix = '%t [%p] %u@%d ' log_checkpoints = on log_lock_waits = on log_temp_files = 0 # Autovacuum — partitioned tables need careful autovacuum tuning. # Each monthly partition is a separate physical table for autovacuum purposes. autovacuum = on autovacuum_max_workers = 3 autovacuum_naptime = 60s timezone = 'UTC' log_timezone = 'UTC' lc_messages = 'en_US.UTF-8' lc_monetary = 'en_US.UTF-8' lc_numeric = 'en_US.UTF-8' lc_time = 'en_US.UTF-8' track_io_timing = on track_counts = on