-- 1. Add missing columns if they don't exist DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'users' AND column_name = 'full_name') THEN ALTER TABLE public.users ADD COLUMN full_name text; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'users' AND column_name = 'avatar_url') THEN ALTER TABLE public.users ADD COLUMN avatar_url text; END IF; IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'users' AND column_name = 'credits') THEN ALTER TABLE public.users ADD COLUMN credits integer default 5; END IF; END $$; -- 2. Create the Trigger Function (Updated to be safe) create or replace function public.handle_new_user() returns trigger as $$ begin insert into public.users (id, email, full_name, avatar_url, credits) values ( new.id, new.email, new.raw_user_meta_data->>'full_name', new.raw_user_meta_data->>'avatar_url', 5 ) ON CONFLICT (id) DO UPDATE SET email = EXCLUDED.email, full_name = EXCLUDED.full_name, avatar_url = EXCLUDED.avatar_url; return new; end; $$ language plpgsql security definer; -- 3. Create the Trigger drop trigger if exists on_auth_user_created on auth.users; create trigger on_auth_user_created after insert on auth.users for each row execute procedure public.handle_new_user(); -- 4. Backfill existing users insert into public.users (id, email, full_name, avatar_url, credits) select id, email, raw_user_meta_data->>'full_name', raw_user_meta_data->>'avatar_url', 5 from auth.users where id not in (select id from public.users);