117 lines
3.7 KiB
SQL
117 lines
3.7 KiB
SQL
-- Adaptar a estrutura da tabela configuracoes existente
|
|
|
|
-- 1. Ver estrutura atual
|
|
SELECT column_name, data_type, is_nullable, column_default
|
|
FROM information_schema.columns
|
|
WHERE table_schema = 'public'
|
|
AND table_name = 'configuracoes'
|
|
ORDER BY ordinal_position;
|
|
|
|
-- 2. Se a coluna é 'chave' e não 'tipo', vamos renomear
|
|
DO $$
|
|
BEGIN
|
|
-- Verificar se existe a coluna 'chave'
|
|
IF EXISTS (
|
|
SELECT 1 FROM information_schema.columns
|
|
WHERE table_schema = 'public'
|
|
AND table_name = 'configuracoes'
|
|
AND column_name = 'chave'
|
|
) AND NOT EXISTS (
|
|
SELECT 1 FROM information_schema.columns
|
|
WHERE table_schema = 'public'
|
|
AND table_name = 'configuracoes'
|
|
AND column_name = 'tipo'
|
|
) THEN
|
|
-- Renomear 'chave' para 'tipo'
|
|
ALTER TABLE public.configuracoes RENAME COLUMN chave TO tipo;
|
|
RAISE NOTICE 'Coluna renomeada de chave para tipo';
|
|
END IF;
|
|
|
|
-- Garantir que a coluna tipo existe
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM information_schema.columns
|
|
WHERE table_schema = 'public'
|
|
AND table_name = 'configuracoes'
|
|
AND column_name = 'tipo'
|
|
) THEN
|
|
ALTER TABLE public.configuracoes ADD COLUMN tipo character varying NOT NULL DEFAULT '';
|
|
RAISE NOTICE 'Coluna tipo adicionada';
|
|
END IF;
|
|
|
|
-- Garantir que a coluna valor existe e é jsonb
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM information_schema.columns
|
|
WHERE table_schema = 'public'
|
|
AND table_name = 'configuracoes'
|
|
AND column_name = 'valor'
|
|
) THEN
|
|
ALTER TABLE public.configuracoes ADD COLUMN valor jsonb;
|
|
RAISE NOTICE 'Coluna valor adicionada';
|
|
END IF;
|
|
|
|
-- Se existe coluna 'valor_str' ou 'valor_string', migrar para 'valor' jsonb
|
|
IF EXISTS (
|
|
SELECT 1 FROM information_schema.columns
|
|
WHERE table_schema = 'public'
|
|
AND table_name = 'configuracoes'
|
|
AND column_name IN ('valor_str', 'valor_string')
|
|
) THEN
|
|
-- Tentar converter os dados
|
|
UPDATE public.configuracoes
|
|
SET valor = COALESCE(valor_str::jsonb, valor_string::jsonb)
|
|
WHERE valor IS NULL;
|
|
RAISE NOTICE 'Dados migrados para coluna valor';
|
|
END IF;
|
|
END $$;
|
|
|
|
-- 3. Remover constraint NOT NULL da coluna chave se ainda existir
|
|
DO $$
|
|
BEGIN
|
|
IF EXISTS (
|
|
SELECT 1 FROM information_schema.columns
|
|
WHERE table_schema = 'public'
|
|
AND table_name = 'configuracoes'
|
|
AND column_name = 'chave'
|
|
AND is_nullable = 'NO'
|
|
) THEN
|
|
ALTER TABLE public.configuracoes ALTER COLUMN chave DROP NOT NULL;
|
|
RAISE NOTICE 'Constraint NOT NULL removida da coluna chave';
|
|
END IF;
|
|
END $$;
|
|
|
|
-- 4. Adicionar constraint UNIQUE na coluna tipo
|
|
DO $$
|
|
BEGIN
|
|
-- Primeiro remover duplicados
|
|
DELETE FROM public.configuracoes
|
|
WHERE id IN (
|
|
SELECT id
|
|
FROM (
|
|
SELECT id, tipo,
|
|
ROW_NUMBER() OVER (PARTITION BY tipo ORDER BY updated_at DESC NULLS LAST, created_at DESC) as rn
|
|
FROM public.configuracoes
|
|
) t
|
|
WHERE rn > 1
|
|
);
|
|
|
|
-- Adicionar constraint
|
|
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 em tipo';
|
|
END IF;
|
|
END $$;
|
|
|
|
-- 5. Verificar resultado final
|
|
SELECT column_name, data_type, is_nullable
|
|
FROM information_schema.columns
|
|
WHERE table_schema = 'public'
|
|
AND table_name = 'configuracoes'
|
|
ORDER BY ordinal_position;
|
|
|
|
-- 6. Mostrar dados
|
|
SELECT * FROM public.configuracoes ORDER BY tipo;
|