44 lines
1.2 KiB
SQL
44 lines
1.2 KiB
SQL
-- Limpar registros duplicados na tabela configuracoes antes de adicionar constraint UNIQUE
|
|
|
|
-- 1. Ver quais registros estão duplicados
|
|
SELECT tipo, COUNT(*) as total
|
|
FROM public.configuracoes
|
|
GROUP BY tipo
|
|
HAVING COUNT(*) > 1;
|
|
|
|
-- 2. Remover duplicados, mantendo apenas o mais recente de cada tipo
|
|
DELETE FROM public.configuracoes
|
|
WHERE id IN (
|
|
SELECT id
|
|
FROM (
|
|
SELECT id, tipo,
|
|
ROW_NUMBER() OVER (PARTITION BY tipo ORDER BY updated_at DESC, created_at DESC) as rn
|
|
FROM public.configuracoes
|
|
) t
|
|
WHERE rn > 1
|
|
);
|
|
|
|
-- 3. Verificar se ainda existem duplicados (deve retornar vazio)
|
|
SELECT tipo, COUNT(*) as total
|
|
FROM public.configuracoes
|
|
GROUP BY tipo
|
|
HAVING COUNT(*) > 1;
|
|
|
|
-- 4. Agora adicionar a constraint UNIQUE
|
|
DO $$
|
|
BEGIN
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM pg_constraint
|
|
WHERE conname = 'configuracoes_tipo_key'
|
|
AND conrelid = 'public.configuracoes'::regclass
|
|
) THEN
|
|
ALTER TABLE public.configuracoes ADD CONSTRAINT configuracoes_tipo_key UNIQUE (tipo);
|
|
RAISE NOTICE 'Constraint UNIQUE adicionada com sucesso!';
|
|
ELSE
|
|
RAISE NOTICE 'Constraint UNIQUE já existe.';
|
|
END IF;
|
|
END $$;
|
|
|
|
-- 5. Verificar o resultado final
|
|
SELECT * FROM public.configuracoes ORDER BY tipo;
|