Buen día gente, al realizar el comando ./guarani migrar_base genera el siguiente error:
Entiendo que no puede generar el trigger ya que no existe la tabla.
Esto es correcto?
La siguiente consulta sería, al parar el script en este punto, quedo bien el schema de auditoría? Deberíamos hacer algo extra para que funcione de manera correcta?
Buen día Javier,
en este hilo habías planteado una situación similar, probá de seguir las indicaciones que se sugieren allí y comentanos si se pudo solucionar.
@stalavera gracias por responder. El tema es que en este caso la tabla no existe, entonces no se si se borro de la versión o no entiendo porque no nos aparece.
Deberíamos tener esa tabla?
Según este hilo ya no se utiliza, o estoy confundido?
Si, el diferencial BD/Diferenciales/3.22.0/001719.sql parece que se ejecuto bien.
Observo lo siguiente:
Función migrar_base_revisiones de php/extension_toba/guarani_modelo.php.
Función get_tablas_triggers_desactivados de vendor/siu-toba/framework/php/modelo/lib/toba_auditoria_tablas_postgres.php.
Función get_triggers_schema de vendor/siu-toba/framework/php/lib/db/toba_db_postgres7.php.
¿que te devuelve la siguiente query?
SELECT t.*,
c.relname as tabla,
n.nspname as schema
FROM pg_trigger as t,
pg_class as c,
pg_namespace as n
WHERE
t.tgrelid = c.oid
AND c.relnamespace = n.oid
AND n.nspname = 'negocio'
AND t.tgenabled = 'D'
AND t.tgname ILIKE 'tauditoria_%';
¿te lista mdp_actividad_economica_subsector en la columna tabla?
En caso de que la tabla mdp_actividad_economica_subsector siga estando en pg_class podes revisar esta respuesta que me dio el ChatGPT:
Si la tabla mdp_actividad_economica_subsector fue eliminada en PostgreSQL pero sigue apareciendo en la tabla de sistema pg_class, esto podría deberse a varias razones. Aquí tienes una explicación detallada de por qué sucede y cómo resolverlo:
1. Transacción pendiente o no confirmada
Si la eliminación de la tabla (DROP TABLE) se ejecutó dentro de una transacción que no fue confirmada (COMMIT) o fue revertida (ROLLBACK), la entrada en pg_class seguirá existiendo hasta que esa transacción finalice.
Cómo verificar:
SELECT * FROM pg_stat_activity WHERE state IN ('idle in transaction', 'active');
Solución:
Asegúrate de que la transacción que eliminó la tabla se haya confirmado:
COMMIT;
Si es necesario, cancela la transacción:
ROLLBACK;
2. Referencia fantasma debido a autovacuum pendiente
Cuando una tabla es eliminada, PostgreSQL marca la entrada en pg_class para ser limpiada por el proceso de autovacuum. Si el autovacuum no ha corrido o está retrasado, la entrada aún podría aparecer.
Cómo verificar:
Consulta el estado del autovacuum:
SELECT * FROM pg_stat_all_tables WHERE relname = 'mdp_actividad_economica_subsector';
Solución:
Ejecuta un VACUUM FULL para limpiar las referencias pendientes:
VACUUM FULL;
3. Dependencias en otras tablas o índices
Si otras tablas, índices, vistas o funciones dependían de mdp_actividad_economica_subsector, es posible que la eliminación de la tabla haya dejado referencias huérfanas en el sistema de catálogos.
Cómo verificar:
Busca dependencias:
SELECT *
FROM pg_depend d
JOIN pg_class c ON d.objid = c.oid
WHERE c.relname = 'mdp_actividad_economica_subsector';
Solución:
Asegúrate de que todas las dependencias relacionadas hayan sido eliminadas.
4. Problemas con extensiones o reglas
Algunas extensiones o configuraciones avanzadas pueden generar reglas o entradas personalizadas en pg_class, que persisten incluso después de eliminar la tabla.
Cómo verificar:
Revisa si la tabla está asociada con alguna extensión:
SELECT * FROM pg_extension WHERE extname IN (SELECT relname FROM pg_class WHERE relname = 'mdp_actividad_economica_subsector');
Solución:
Si está vinculada a una extensión, considera reinstalar o revisar la extensión.
5. Corrupción en los catálogos del sistema
En casos raros, especialmente después de caídas abruptas o errores de disco, los catálogos del sistema pueden corromperse, dejando entradas inválidas.
Cómo verificar:
Busca inconsistencias en pg_class:
SELECT relname, relkind, oid FROM pg_class WHERE relname = 'mdp_actividad_economica_subsector';
Solución:
Si confirmas que la tabla ya no debería existir, reconstruye los catálogos: