← back to Nas Setup
Gate D (TK-10076): add realestate DB 3-2-1 backup — nightly prod pg_dump + Henry/NAS pull mirror; parameterize PGDUMP_TOC_FLOOR for small DBs
e448b03a640874bd96920b64d5983708037b3c28 · 2026-08-06 13:35:44 -0700 · Steve
Files touched
A launchd/com.steve.nas-realestate-dump-mirror.plistM scripts/pull-dw-dump.sh
Diff
commit e448b03a640874bd96920b64d5983708037b3c28
Author: Steve <steve@designerwallcoverings.com>
Date: Thu Aug 6 13:35:44 2026 -0700
Gate D (TK-10076): add realestate DB 3-2-1 backup — nightly prod pg_dump + Henry/NAS pull mirror; parameterize PGDUMP_TOC_FLOOR for small DBs
---
launchd/com.steve.nas-realestate-dump-mirror.plist | 47 ++++++++++++++++++++++
scripts/pull-dw-dump.sh | 6 ++-
2 files changed, 51 insertions(+), 2 deletions(-)
diff --git a/launchd/com.steve.nas-realestate-dump-mirror.plist b/launchd/com.steve.nas-realestate-dump-mirror.plist
new file mode 100644
index 0000000..a823f95
--- /dev/null
+++ b/launchd/com.steve.nas-realestate-dump-mirror.plist
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<!--
+ com.steve.nas-realestate-dump-mirror — pull the nightly Kamatera `realestate` dump to BOTH
+ on-prem destinations (Henry local drive + NAS 2TB share), mirroring the dw_unified job.
+ Added 2026-08-06 (TK-10076 Gate D): realestate (rentv_licensed_targets ~102k rows, serving
+ /api/summit/licensed + public /services) had no offsite copy. Reuses the same parameterized
+ pull-dw-dump.sh via PGDUMP_GLOB + *_BACKUP_DIR overrides. Runs 03:50 (5 min after the
+ dw_unified pull, both after the 03:00 PT Kamatera dumps). NAS leg no-ops until mounted.
+-->
+<plist version="1.0">
+<dict>
+ <key>Label</key>
+ <string>com.steve.nas-realestate-dump-mirror</string>
+ <key>ProgramArguments</key>
+ <array>
+ <string>/bin/bash</string>
+ <string>/Users/macstudio3/Projects/nas-setup/scripts/pull-dw-dump.sh</string>
+ </array>
+ <key>EnvironmentVariables</key>
+ <dict>
+ <key>HENRY_BACKUP_DIR</key>
+ <string>/Volumes/Henry/dw-backups/realestate</string>
+ <key>NAS_BACKUP_DIR</key>
+ <string>/Volumes/DW-Backups/realestate</string>
+ <key>PGDUMP_GLOB</key>
+ <string>/root/backups/db/realestate_*.dump</string>
+ <key>PGDUMP_FLOOR_MB</key>
+ <string>1</string>
+ <key>PGDUMP_TOC_FLOOR</key>
+ <string>5</string>
+ <key>PATH</key>
+ <string>/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
+ </dict>
+ <key>StartCalendarInterval</key>
+ <dict>
+ <key>Hour</key><integer>3</integer>
+ <key>Minute</key><integer>50</integer>
+ </dict>
+ <key>RunAtLoad</key>
+ <false/>
+ <key>StandardOutPath</key>
+ <string>/Users/macstudio3/Projects/nas-setup/data/launchd-realestate.out.log</string>
+ <key>StandardErrorPath</key>
+ <string>/Users/macstudio3/Projects/nas-setup/data/launchd-realestate.err.log</string>
+</dict>
+</plist>
diff --git a/scripts/pull-dw-dump.sh b/scripts/pull-dw-dump.sh
index c342136..519080b 100755
--- a/scripts/pull-dw-dump.sh
+++ b/scripts/pull-dw-dump.sh
@@ -24,6 +24,7 @@
# PGDUMP_HOST ssh target (default root@45.61.58.125)
# PGDUMP_GLOB remote dump glob (default /root/backups/db/dw_unified_*.dump)
# PGDUMP_FLOOR_MB reject dumps smaller than this (default 100)
+# PGDUMP_TOC_FLOOR min pg_restore --list entries (default 100; lower for small DBs)
# RETENTION_KEEP keep N newest local copies, 0 = keep all (default 0)
# PULL_TO alert email (default steve@designerwallcoverings.com)
set -uo pipefail
@@ -33,6 +34,7 @@ NAS_BACKUP_DIR="${NAS_BACKUP_DIR:-/Volumes/DW-Backups/dw_unified}"
HOST="${PGDUMP_HOST:-root@45.61.58.125}"
GLOB="${PGDUMP_GLOB:-/root/backups/db/dw_unified_*.dump}"
FLOOR_MB="${PGDUMP_FLOOR_MB:-100}"
+TOC_FLOOR="${PGDUMP_TOC_FLOOR:-100}"
RETENTION_KEEP="${RETENTION_KEEP:-0}"
PGBIN="/opt/homebrew/opt/postgresql@14/bin"; export PATH="$PGBIN:$PATH"
@@ -113,8 +115,8 @@ pull_one(){
log "[$LABEL] FAIL: pulled dump ${SIZE_MB}MB < floor ${FLOOR_MB}MB (truncated?)"; return 1
fi
TOC=$(pg_restore --list "$DEST" 2>>"$LOG" | grep -c ';' || echo 0)
- if [ "$TOC" -lt 100 ]; then
- log "[$LABEL] FAIL: pg_restore --list shows only $TOC entries — dump not structurally valid"; return 1
+ if [ "$TOC" -lt "$TOC_FLOOR" ]; then
+ log "[$LABEL] FAIL: pg_restore --list shows only $TOC entries (floor $TOC_FLOOR) — dump not structurally valid"; return 1
fi
log "[$LABEL] PASS: $BASE — ${SIZE_MB}MB, $TOC TOC entries → $DEST"
← b0fe09e mirror FAIL alert: send from steve-office, not info@
·
back to Nas Setup
·
auto-data-snapshot: 2026-08-07T07:29:27 (1 data files) — lau a442f8d →