32 lines
879 B
PL/PgSQL
32 lines
879 B
PL/PgSQL
-- =====================================================
|
|
-- Optimistic Locking via Version Column
|
|
--
|
|
-- Problem: Two admins editing the same member silently
|
|
-- overwrite each other's changes. Last write wins.
|
|
--
|
|
-- Fix: Add version column, auto-increment on update.
|
|
-- API layer checks version match before writing.
|
|
-- =====================================================
|
|
|
|
-- Add version column
|
|
ALTER TABLE public.members
|
|
ADD COLUMN IF NOT EXISTS version integer NOT NULL DEFAULT 1;
|
|
|
|
-- Auto-increment version on every update
|
|
CREATE OR REPLACE FUNCTION public.increment_member_version()
|
|
RETURNS trigger
|
|
LANGUAGE plpgsql
|
|
SECURITY DEFINER
|
|
SET search_path = ''
|
|
AS $$
|
|
BEGIN
|
|
NEW.version := OLD.version + 1;
|
|
RETURN NEW;
|
|
END;
|
|
$$;
|
|
|
|
CREATE TRIGGER trg_members_increment_version
|
|
BEFORE UPDATE ON public.members
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION public.increment_member_version();
|