Files
Erupe/server/migrations/sql/0007_savedata_integrity.sql
Houmgaor 197164bc94 docs: log savedata corruption defense in CHANGELOG
Merge migrations 0007 and 0008 into a single 0007_savedata_integrity
migration since neither has been released yet.
2026-03-17 19:30:43 +01:00

17 lines
778 B
SQL

-- Savedata integrity protections: rotating backups + checksum verification.
-- Rotating backup table (3 slots per character, time-gated).
-- Prevents permanent data loss from save corruption by keeping recent snapshots.
CREATE TABLE IF NOT EXISTS savedata_backups (
char_id INTEGER NOT NULL REFERENCES characters(id) ON DELETE CASCADE,
slot SMALLINT NOT NULL CHECK (slot BETWEEN 0 AND 2),
savedata BYTEA NOT NULL,
saved_at TIMESTAMPTZ NOT NULL DEFAULT now(),
PRIMARY KEY (char_id, slot)
);
-- SHA-256 checksum column for savedata integrity verification.
-- Stored as 32 raw bytes (not hex). NULL means no hash computed yet
-- (backwards-compatible with existing data).
ALTER TABLE characters ADD COLUMN IF NOT EXISTS savedata_hash BYTEA;