-- 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;