Text · 1404 bytes Raw Blame History
1 # Managed by Ansible — drop-in include for /etc/postgresql/16/main/conf.d/.
2 # Postgres reads everything in conf.d after the main postgresql.conf
3 # (the Debian-shipped file enables `include_dir = 'conf.d'`).
4 #
5 # We use a drop-in instead of overwriting postgresql.conf because the
6 # Debian package's default file carries dozens of platform-specific
7 # settings that touching them risks breaking. Smaller blast radius.
8 #
9 # Changing archive_mode requires a full Postgres RESTART (not just
10 # reload) — the SIGHUP-reload path can't toggle it.
11
12 # WAL archiving — required for PITR. Ships every WAL segment to
13 # spaces-prod:shithub-wal via /usr/local/bin/shithub-pg-archive.
14 # Operator must:
15 # 1. Create the shithub-wal bucket in the primary Spaces region
16 # (and shithub-wal-dr in the DR region for sync-cross-region.sh).
17 # 2. Extend the prod RW Spaces key's grants to include readwrite
18 # on both buckets.
19 # 3. systemctl restart postgresql@16-main
20 # 4. Verify: SELECT * FROM pg_stat_archiver \\gx — last_archived_wal
21 # becomes non-null within ~60s (archive_timeout).
22 wal_level = replica
23 archive_mode = on
24 archive_command = '/usr/local/bin/shithub-pg-archive %p %f'
25 # Force WAL rotation if no segment fills naturally — bounds RPO at
26 # 60s on a quiet server. The penalty is one extra ~16 MB segment per
27 # minute of idle, which Spaces lifecycle handles cheaply.
28 archive_timeout = 60