El Registro de éste tipo, NO se puede ingresar más de una vez

De un momento a otro, al abrir cualquier aplicación toba_2_x, desde el mismo momento del logueo y al hacer click en cualquier operación o seleccionar de un combo, no me permite trabajar ya que muestra el siguiente error.

El Registro de éste tipo, NO se puede ingresar más de una vez; Editelo y haga los cambios necesarios
todos lo proyectos funcionaban y no se han realizado cambios últimamente.

Urge, mil gracias.

Hola Jhon,

el mensaje de error que mencionas, es propio del proyecto, de toba, de Postgres ?, necesito mas informacion para poder ayudarte… es algo demasiado generico lo que mencionas.

Ademas, si comenzo a suceder de un momento a otro… necesariamente algo cambio, ya sea en la configuracion del equipo o en el codigo de la aplicacion.

En principio, deberias al menos determinar fehacientemente la fuente del error… para tener un punto de partida y analizar desde ahi.

Miraria en los logs de apache, de toba, buscaria en el codigo del proyecto donde es que se dispara ese error, etc… toda informacion que puedas recaudar va a ayudar.

Saludos

Ingeniero, gracias por responder

Precisamente, porque NO se ha hecho cambios, ni de equipo, ni de aplicación y porque ese mensaje al parecer es propia del framework de toba, te preguntaba, ya que se generaliza por todas las aplicaciones y NO deja trabajar mostrando dicho mensaje.

En el log aparece como un error de acceso a una solicitud web, osea que se maneja desde el framework

[DEBUG][col_arauca] PUNTO DE MONTAJE: se cargó exitosamente el autoload del punto de montaje proyecto
[INFO][toba] Se detecto acceso desde el menu. Se limpia la memoria de la operacion
[DEBUG][toba] [SECCION] Iniciando componentes…
[DEBUG][toba] [SECCION] Configurando dependencias para responder al servicio…
[DEBUG][toba] [SECCION] Respondiendo al servicio__generar_html…
[ERROR][col_arauca] SQLSTATE[23505]: Unique violation: 7 ERROR: llave duplicada viola restricción de unicidad «apex_log_sol_pk»
[CRITICAL][toba] toba_error_db:

SQLSTATE: db_23505

CODIGO: 7

MENSAJE: ERROR: llave duplicada viola restricción de unicidad «apex_log_sol_pk»

SQL: INSERT INTO apex_solicitud (proyecto, solicitud, solicitud_tipo, item_proyecto, item, tiempo_respuesta)
VALUES (:proyecto, :solicitud, :solicitud_tipo,:item_proyecto, :item, :tiempo_respuesta);

[TRAZA]exception ‘toba_error_db’ with message ‘El Registro de éste tipo, NO se puede ingresar más de una vez; Editelo y haga los cambios necesarios’ in /proyectos/toba_2_0/php/lib/db/toba_db.php:335
Stack trace:
#0 /proyectos/toba_2_0/php/nucleo/lib/toba_instancia.php(173): toba_db->sentencia(‘INSERT?INTO ape…’, Array)
#1 /proyectos/toba_2_0/php/nucleo/toba_solicitud.php(125): toba_instancia->registrar_solicitud(1000064, ‘col_arauca’, ‘5868’, ‘web’)
#2 /proyectos/toba_2_0/php/nucleo/toba_solicitud_web.php(503): toba_solicitud->registrar()
#3 /proyectos/toba_2_0/php/nucleo/toba_nucleo.php(84): toba_solicitud_web->registrar()
#4 /proyectos/toba_2_0/proyectos/col_arauca/www/aplicacion.php(24): toba_nucleo->acceso_web()
#5 {main}

Gracias


error editar.png

error editar.png

Hola Jhon,

el mensaje de error es de postgres, por una clave duplicada… estimo que tenes extendido el manejador de errores y por eso no podia encontrar el mensaje dentro del codigo de Toba.

Mas alla de eso, si esta tirando un error de clave duplicada, es porque la secuencia que se esta usando para hacer el insert esta mal… asi que quizas no cambiaron nada en la aplicacion, configuracion,etc… pero aparentemente tocaron el motor de bd.

Quizas se insertaron registros a mano, donde se paso el valor para dichas columnas explicitamente… en esos casos, si no se actualiza el valor de la secuencia… la misma queda apuntando a un nro ya usado y por tanto va a fallar al intentar ingresar un nuevo registro.

Te recomiendo que observen los valores que tienen las secuencias para dichas tablas, evidentemente estan desactualizados.

Saludos

Ingeniero, muchas gracias

Aumente el consecutivo del serial de dicha tabla y se soluciona, solo me queda la duda que NO se ingresaron manualmente registros a dicha tabla, y menos de la base de toba

Otra pregunta, esa tabla no tienen limpieza automática ? porque me está superando los dos millones de registros, o que recomiendas en este caso ? si borramos las más antiguas no habrá problemas ?

Gracias de nuevo.

Hola

el error que salta

[CRITICAL][toba] toba_error_db: <p><b>SQLSTATE:</b> db_23505</p><p><b>CODIGO:</b> 7</p><p><b>MENSAJE:</b> ERROR:  llave duplicada viola restricción de unicidad «apex_log_sol_pk»</p><p><b>SQL:</b> INSERT   INTO apex_solicitud (proyecto, solicitud, solicitud_tipo, item_proyecto, item, tiempo_respuesta)   
            VALUES (:proyecto, :solicitud, :solicitud_tipo,:item_proyecto, :item, :tiempo_respuesta);</p>

está insertando un valor en el campo solicitud el cual es el serial.

Emilio

Hola Jhon,

hay pocas maneras de que una secuencia quede desactualizada, una es incluyendo registros manualmente o via sistema con el valor para la columna, sin actualizar la secuencia, la otra seria que la secuencia pegue toda la vuelta (por los valores que veo, quedan nros para rato ahi), una tercera manera seria que mediante SQL se le asigne un valor viejo a la secuencia.

Necesariamente se dio alguno de los casos, de otra manera no puede quedar desactualizada ya que dichos nros no se reusan jamas, un select nextval(secuencia) actualiza dicho valor y el mismo ya no puede ser utilizado nuevamente, aun cuando la transaccion haga rollback.

Si por el contrario la actualizacion fuera parte de un insert, el mismo fallaria de no poder actualizar el valor de la secuencia.

Otra pregunta, esa tabla no tienen limpieza automática ? porque me está superando los dos millones de registros, o que recomiendas en este caso ? si borramos las más antiguas no habrá problemas ?

No, las tablas de log de toba no tienen limpieza automatica, son un historial de todos los accesos que se tuvo a la instancia y los proyectos.

Existe el comando toba instalacion eliminar_logs el tema es que dicho comando va a eliminar todo log hasta el dia de la fecha, no existe posibilidad de marcarle un rango de tiempo a ser conservado. Quizas haya que agregar un nuevo comando para contemplar este caso.

Saludos

Hola Emilio,

efectivamente se esta insertando la columna con un valor, se hace asi porque el mismo se recupera al inicio de la solicitud mediante el metodo toba_instancia::get_id_solicitud, el cual hace un select de la secuencia permitiendonos obtener asi el proximo id.

Se realiza de esta manera porque dicho ID es utilizado en distintas partes de toba, inclusive se adjunta a las SQL’s ejecutadas… de no recuperarlo al inicio, se deberia esperar hasta el final de esa transaccion para obtenerlo, lo cual nos haria imposible ciertas cuestiones.

Saludos