chore: sincroniza projeto para gitea
This commit is contained in:
116
scripts/adaptar_tabela_configuracoes.sql
Normal file
116
scripts/adaptar_tabela_configuracoes.sql
Normal file
@@ -0,0 +1,116 @@
|
||||
-- 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;
|
||||
Reference in New Issue
Block a user