87 lines
2.1 KiB
PL/PgSQL
87 lines
2.1 KiB
PL/PgSQL
-- =====================================================
|
|
-- SCRIPT COMPLETO PARA CORRIGIR PROBLEMAS DO SUPABASE
|
|
-- =====================================================
|
|
|
|
-- 1. CRIAR TABELA USERS SE NÃO EXISTIR
|
|
CREATE TABLE IF NOT EXISTS public.users (
|
|
id UUID REFERENCES auth.users(id) PRIMARY KEY,
|
|
name TEXT,
|
|
email TEXT,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
);
|
|
|
|
-- 2. REMOVER TRIGGERS E FUNÇÕES ANTIGAS
|
|
DROP TRIGGER IF EXISTS on_auth_user_created ON auth.users;
|
|
DROP FUNCTION IF EXISTS public.handle_new_user();
|
|
|
|
-- 3. CRIAR FUNÇÃO DE TRIGGER CORRETA
|
|
CREATE OR REPLACE FUNCTION public.handle_new_user()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
INSERT INTO public.users (id, name, email)
|
|
VALUES (
|
|
NEW.id,
|
|
COALESCE(NEW.raw_user_meta_data->>'name', 'User'),
|
|
NEW.email
|
|
);
|
|
RETURN NEW;
|
|
EXCEPTION
|
|
WHEN duplicate_key THEN
|
|
-- User already exists, ignore
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql SECURITY DEFINER;
|
|
|
|
-- 4. CRIAR TRIGGER
|
|
CREATE TRIGGER on_auth_user_created
|
|
AFTER INSERT ON auth.users
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION public.handle_new_user();
|
|
|
|
-- 5. DESABILITAR RLS PARA A TABELA USERS (TEMPORÁRIO)
|
|
ALTER TABLE public.users DISABLE ROW LEVEL SECURITY;
|
|
|
|
-- 6. DAR PERMISSÕES COMPLETAS PARA ANON E AUTHENTICATED
|
|
GRANT ALL ON public.users TO anon;
|
|
GRANT ALL ON public.users TO authenticated;
|
|
GRANT ALL ON public.users TO service_role;
|
|
|
|
-- 7. VERIFICAR ESTRUTURA DA TABELA
|
|
SELECT
|
|
column_name,
|
|
data_type,
|
|
is_nullable,
|
|
column_default
|
|
FROM information_schema.columns
|
|
WHERE table_name = 'users'
|
|
AND table_schema = 'public'
|
|
ORDER BY ordinal_position;
|
|
|
|
-- 8. VERIFICAR PERMISSÕES
|
|
SELECT
|
|
grantee,
|
|
table_name,
|
|
privilege_type
|
|
FROM information_schema.role_table_grants
|
|
WHERE table_name = 'users'
|
|
AND table_schema = 'public';
|
|
|
|
-- 9. VERIFICAR TRIGGERS
|
|
SELECT
|
|
trigger_name,
|
|
event_manipulation,
|
|
action_timing,
|
|
action_condition,
|
|
action_statement
|
|
FROM information_schema.triggers
|
|
WHERE event_object_table = 'users'
|
|
OR event_object_table = 'users';
|
|
|
|
-- 10. VERIFICAR FUNÇÕES
|
|
SELECT
|
|
proname,
|
|
prosrc
|
|
FROM pg_proc
|
|
WHERE proname = 'handle_new_user';
|