DO $$ BEGIN -- 1. Analysis/Scoring Columns IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='posts' AND column_name='tone_label') THEN ALTER TABLE posts ADD COLUMN tone_label TEXT; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='posts' AND column_name='cis_score') THEN ALTER TABLE posts ADD COLUMN cis_score NUMERIC; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='posts' AND column_name='moderation_status') THEN ALTER TABLE posts ADD COLUMN moderation_status TEXT NOT NULL DEFAULT 'approved'; END IF; -- 2. Post Configuration/Metadata IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='posts' AND column_name='visibility') THEN ALTER TABLE posts ADD COLUMN visibility TEXT NOT NULL DEFAULT 'authenticated'; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='posts' AND column_name='expires_at') THEN ALTER TABLE posts ADD COLUMN expires_at TIMESTAMPTZ; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='posts' AND column_name='body_format') THEN ALTER TABLE posts ADD COLUMN body_format TEXT; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='posts' AND column_name='background_id') THEN ALTER TABLE posts ADD COLUMN background_id TEXT; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='posts' AND column_name='tags') THEN ALTER TABLE posts ADD COLUMN tags TEXT[]; END IF; -- 3. Media IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='posts' AND column_name='thumbnail_url') THEN ALTER TABLE posts ADD COLUMN thumbnail_url TEXT; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='posts' AND column_name='video_url') THEN ALTER TABLE posts ADD COLUMN video_url TEXT; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='posts' AND column_name='duration_ms') THEN ALTER TABLE posts ADD COLUMN duration_ms INTEGER; END IF; -- 4. Beacons (Geo) IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='posts' AND column_name='location') THEN -- Assuming PostGIS extension enabled ALTER TABLE posts ADD COLUMN location geography(POINT); END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='posts' AND column_name='is_beacon') THEN ALTER TABLE posts ADD COLUMN is_beacon BOOLEAN DEFAULT FALSE; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='posts' AND column_name='beacon_type') THEN ALTER TABLE posts ADD COLUMN beacon_type TEXT; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='posts' AND column_name='confidence_score') THEN ALTER TABLE posts ADD COLUMN confidence_score DOUBLE PRECISION; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='posts' AND column_name='is_active_beacon') THEN ALTER TABLE posts ADD COLUMN is_active_beacon BOOLEAN DEFAULT FALSE; END IF; END $$;