fix(db): corregir migración 09 — dropear vista y función antes de alterar columna
Postgres no permite alterar el tipo de una columna usada por una vista o función. La migración ahora dropea vista_resumen_nichos y buscar_guiones_similares, altera score_engagement a numeric(10,4) y las recrea con el nuevo tipo. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@ -7,7 +7,82 @@
|
|||||||
-- (likes + compartidos*3) / vistas * 100 puede superar 100
|
-- (likes + compartidos*3) / vistas * 100 puede superar 100
|
||||||
-- y Postgres lanza "numeric field overflow".
|
-- y Postgres lanza "numeric field overflow".
|
||||||
-- SOLUCIÓN: ampliar a numeric(10,4) → soporta hasta 999999.9999
|
-- SOLUCIÓN: ampliar a numeric(10,4) → soporta hasta 999999.9999
|
||||||
|
--
|
||||||
|
-- Hay que dropear la vista y la función que dependen del tipo
|
||||||
|
-- antes de alterar la columna, y recrearlas después.
|
||||||
-- ============================================================
|
-- ============================================================
|
||||||
|
|
||||||
|
-- 1. Dropear dependencias
|
||||||
|
drop view if exists vista_resumen_nichos;
|
||||||
|
drop function if exists buscar_guiones_similares(vector(1536), text, integer, uuid, boolean);
|
||||||
|
|
||||||
|
-- 2. Alterar la columna
|
||||||
alter table guiones
|
alter table guiones
|
||||||
alter column score_engagement type numeric(10,4);
|
alter column score_engagement type numeric(10,4);
|
||||||
|
|
||||||
|
-- 3. Recrear función buscar_guiones_similares con el nuevo tipo
|
||||||
|
create or replace function buscar_guiones_similares(
|
||||||
|
p_vector vector(1536),
|
||||||
|
p_niche text,
|
||||||
|
p_limite integer default 5,
|
||||||
|
p_cliente_id uuid default null,
|
||||||
|
p_solo_exitosos boolean default true
|
||||||
|
)
|
||||||
|
returns table (
|
||||||
|
id uuid,
|
||||||
|
niche text,
|
||||||
|
sub_niche text,
|
||||||
|
plataforma plataforma_enum,
|
||||||
|
gancho_texto text,
|
||||||
|
estructura_narrativa estructura_narrativa_enum,
|
||||||
|
trigger_emocional trigger_emocional_enum,
|
||||||
|
score_engagement numeric(10,4),
|
||||||
|
score_virabilidad integer,
|
||||||
|
score_cialdini integer,
|
||||||
|
resumen_patron text,
|
||||||
|
similitud float
|
||||||
|
)
|
||||||
|
language sql stable
|
||||||
|
as $$
|
||||||
|
select
|
||||||
|
g.id,
|
||||||
|
g.niche,
|
||||||
|
g.sub_niche,
|
||||||
|
g.plataforma,
|
||||||
|
g.gancho_texto,
|
||||||
|
g.estructura_narrativa,
|
||||||
|
g.trigger_emocional,
|
||||||
|
g.score_engagement,
|
||||||
|
g.score_virabilidad,
|
||||||
|
g.score_cialdini,
|
||||||
|
g.resumen_patron,
|
||||||
|
1 - (g.embedding_vector <=> p_vector) as similitud
|
||||||
|
from guiones g
|
||||||
|
where
|
||||||
|
g.procesado_ok = true
|
||||||
|
and g.embedding_vector is not null
|
||||||
|
and g.niche = p_niche
|
||||||
|
and (p_cliente_id is null or g.cliente_id = p_cliente_id)
|
||||||
|
and (not p_solo_exitosos or (g.score_engagement is not null and g.score_engagement > 0))
|
||||||
|
order by
|
||||||
|
g.embedding_vector <=> p_vector
|
||||||
|
limit p_limite;
|
||||||
|
$$;
|
||||||
|
|
||||||
|
-- 4. Recrear vista vista_resumen_nichos
|
||||||
|
create or replace view vista_resumen_nichos as
|
||||||
|
select
|
||||||
|
g.niche,
|
||||||
|
g.cliente_id,
|
||||||
|
c.nombre as cliente_nombre,
|
||||||
|
count(*) as total_guiones,
|
||||||
|
round(avg(g.score_engagement)::numeric, 4) as engagement_promedio,
|
||||||
|
round(avg(g.score_virabilidad)::numeric, 1) as virabilidad_promedio,
|
||||||
|
round(avg(g.score_cialdini)::numeric, 1) as cialdini_promedio,
|
||||||
|
max(g.score_engagement) as mejor_engagement,
|
||||||
|
max(g.fecha_analisis) as ultimo_analisis
|
||||||
|
from guiones g
|
||||||
|
left join clientes c on c.id = g.cliente_id
|
||||||
|
where g.procesado_ok = true
|
||||||
|
group by g.niche, g.cliente_id, c.nombre
|
||||||
|
order by engagement_promedio desc nulls last;
|
||||||
|
|||||||
Reference in New Issue
Block a user