Problemas con base de auditoría

Buenas, estamos tratando de actualizar la base de auditoría de nuestro esquema de negocio personalizado. Es decir tenemos una fuente a parte que apunta a un esquema nuestro. El problema es que solo funciona cuando ponemos “No” al mantener datos actuales y --force 1
Es decir, cuando lo corremos así:
./guarani crear_auditoria -f guarani_pers -s negocio_pers --force 1

Si bien los datos en las tablas de auditoria parecen no borrarse tenemos miedo de que esto nos traiga algún problema. Alguna sugerencia?

Hola Pablo

  ¿Como va?, ¿Qué sucede cuando no funciona el comando? ¿Pueden enviar el log de comandos cuando tienen el problema?

Saludos

Cuando corro el comando seleccionando “Sí” en "Desea mantener los datos de auditoria actuales? " tira el error Duplicate schema: 7 ERROR: schema “negocio_auditoria” already exists.
La segunda corrida funciona bien, cuando selecciono “No”

-o-o-o-o-o-
Fecha: 22-02-2017 11:46:17
Version-PHP: 5.6.21
Ruta: /var/local/gestion/lib/toba/bin
Argumentos: proyecto crear_auditoria -f guarani -s negocio --force 1
==========
[DEBUG][guarani] INSTALACION "/var/local/gestion/docker-data/instalacion"
[DEBUG][guarani] Parametros instancia desarrollo: array (
  'base' => 'toba_guarani',
  'proyectos' => 'toba_referencia, toba_usuarios, toba_editor, guarani',
  'tipo' => 'normal',
  'toba_referencia' => 
  array (
    'path' => '/var/local/gestion/lib/toba/proyectos/toba_referencia',
    'url' => '/toba_referencia/2.7',
  ),
  'toba_usuarios' => 
  array (
    'path' => '/var/local/gestion/lib/toba/proyectos/toba_usuarios',
    'url' => '/toba_usuarios/2.7',
  ),
  'toba_editor' => 
  array (
    'path' => '/var/local/gestion/lib/toba/proyectos/toba_editor',
    'url' => '/toba_editor/2.7',
  ),
  'guarani' => 
  array (
    'path' => '/var/local/gestion',
    'url' => '/guarani/3.12',
    'url_pers' => '/guarani_pers/3.12',
  ),
)
[DEBUG][guarani] INSTANCIA "desarrollo"
[DEBUG][guarani] Conectando a base 'toba_guarani'
[DEBUG][guarani] Parametros de conexion: array (
  'motor' => 'postgres7',
  'profile' => 'pg',
  'usuario' => 'postgres',
  'clave' => 'postgres',
  'base' => 'toba_guarani',
  'puerto' => '5432',
  'encoding' => 'LATIN1',
  'schema' => 'desarrollo',
)
[DEBUG][guarani] PROYECTO "guarani"
[DEBUG][fuentes activas] array (
  0 => 'guarani',
)
[DEBUG][schemas de fuentes] array (
  'guarani' => 
  array (
    1 => 'negocio',
  ),
)
[DEBUG][guarani] Conectando a base 'desarrollo guarani guarani'
[DEBUG][guarani] Parametros de conexion: array (
  'motor' => 'postgres7',
  'profile' => 'pg',
  'usuario' => 'postgres',
  'clave' => 'postgres',
  'puerto' => '5432',
  'encoding' => 'LATIN1',
  'schema' => 'negocio',
  'base' => 'toba_guarani',
)
[DEBUG][toba] ************ ABRIR transaccion (toba_guarani@pg) ****************
[ERROR][guarani] SQLSTATE[42P06]: Duplicate schema: 7 ERROR:  schema "negocio_auditoria" already exists
[DEBUG][toba] ************ ABORTAR transaccion (toba_guarani@pg) ****************







-o-o-o-o-o-
Fecha: 22-02-2017 11:55:38
Version-PHP: 5.6.21
Ruta: /var/local/gestion/lib/toba/bin
Argumentos: proyecto crear_auditoria -f guarani -s negocio --force 1
==========
[DEBUG][guarani] INSTALACION "/var/local/gestion/docker-data/instalacion"
[DEBUG][guarani] Parametros instancia desarrollo: array (
  'base' => 'toba_guarani',
  'proyectos' => 'toba_referencia, toba_usuarios, toba_editor, guarani',
  'tipo' => 'normal',
  'toba_referencia' => 
  array (
    'path' => '/var/local/gestion/lib/toba/proyectos/toba_referencia',
    'url' => '/toba_referencia/2.7',
  ),
  'toba_usuarios' => 
  array (
    'path' => '/var/local/gestion/lib/toba/proyectos/toba_usuarios',
    'url' => '/toba_usuarios/2.7',
  ),
  'toba_editor' => 
  array (
    'path' => '/var/local/gestion/lib/toba/proyectos/toba_editor',
    'url' => '/toba_editor/2.7',
  ),
  'guarani' => 
  array (
    'path' => '/var/local/gestion',
    'url' => '/guarani/3.12',
    'url_pers' => '/guarani_pers/3.12',
  ),
)
[DEBUG][guarani] INSTANCIA "desarrollo"
[DEBUG][guarani] Conectando a base 'toba_guarani'
[DEBUG][guarani] Parametros de conexion: array (
  'motor' => 'postgres7',
  'profile' => 'pg',
  'usuario' => 'postgres',
  'clave' => 'postgres',
  'base' => 'toba_guarani',
  'puerto' => '5432',
  'encoding' => 'LATIN1',
  'schema' => 'desarrollo',
)
[DEBUG][guarani] PROYECTO "guarani"
[DEBUG][fuentes activas] array (
  0 => 'guarani',
)
[DEBUG][schemas de fuentes] array (
  'guarani' => 
  array (
    1 => 'negocio',
  ),
)
[DEBUG][guarani] Conectando a base 'desarrollo guarani guarani'
[DEBUG][guarani] Parametros de conexion: array (
  'motor' => 'postgres7',
  'profile' => 'pg',
  'usuario' => 'postgres',
  'clave' => 'postgres',
  'puerto' => '5432',
  'encoding' => 'LATIN1',
  'schema' => 'negocio',
  'base' => 'toba_guarani',
)
[DEBUG][toba] ************ ABRIR transaccion (toba_guarani@pg) ****************
[DEBUG][toba] ************ CERRAR transaccion (toba_guarani@pg) ****************

Buenas. Estuve revisando el código y no termino de entender como funciona del todo. Se supone que si el esquema de auditoria ya existe, realiza una migración y vuelve a crear todas funciones, triggers, más alteración de tablas para agregar columnas nuevas. Lo que no entiendo es como funciona el mantiene datos sí/no. Si se selecciona sí, baja los datos del esquema de auditoria a archivo, hace la migración y luego quiere ejecutar el archivo. Esto no va a funcionar ya que nunca borra los datos del esquema. Es decir quiere levantar el dump sin borrar nada.

Volviendo a mi pregunta original. Es seguro correr este comando con --force 1 y NO a la pregunta de guardar datos? Se supone que lo único que debería hacer es regenerar los triggers y modificar las tablas, sin perdida de datos. Saludos!

Hola Pablo,

por lo que veo es el remanente de una forma vieja de trabajo, probablemente se cambio debido al tiempo que llevaba volver a levantar los datos, que por otro lado en caso de perder columnas seguramente no funcionaba tampoco. Seguramente se modifico la parte del modelo pero jamas se toco el comando para reflejar la nueva manera de trabajo.

La auditoría no tiene porque perder datos ya que no elimina ninguno, la migracion como decis vos unicamente toca los triggers y agrega columnas nuevas. Cualquier otro trabajo sobre la auditoria queda a cargo del proyecto directamente.

Con respecto a tu pregunta, si es seguro:

  • El force le indica que elimine todos los triggers durante el proceso, se hace para poder quitar aquellos que estan desactivados y que de otra manera generan un error. Como contrapartida, el problema es que esos triggers ahora quedan activos.

  • El NO, lo unico que hace es no realizarte un backup del esquema… pero como de cualquier forma no se tienen que perder datos (a menos que el proyecto elimine columnas), no genera mayor inconveniente que asi lo indiques.

De todas maneras, voy a modificar el comando para que ofrezca la posibilidad de backupear la auditoria… pero sin restauracion posterior, ya que eso de todas manera es muy propenso a fallas.

Saludos

Buenísimo Richard. De todas maneras los triggers de los que estamos hablando son siempre triggers de auditoria. No toca triggers de otro tipo, no? Saludos y gracias por la respuesta!

Hola Pablo,

si, son triggers de auditoria nomas… a menos que alguien haga un trigger cuyo nombre arranque con el patron “tauditoria_”, no deberia ser tocado.

Saludos