Migrar base negocio de 3.15 a 3.16.x

Buenos días,
Tenemos una instalación recien hecha en desarrollo de 3.16.2, queríamos saber si los siguientes pasos son correctos para cargar una base de 3.15 con datos

1-dump de la base negocio de la 3.16
2-restor del dump en el servidor con base 3.16 (pisando el esquema negocio de la actual)
Ejecutar ./guarani migrar_base

Aguardamos sus comentarios
Gracias

Buenas, estuve tratando de entender lo que pusiste pero no pude entender mucho.
Lo que necesitas hacer si es de está forma estaría bien.

1-dump de la base negocio de la 3.15
2-restor del dump en el servidor con base 3.15 (pisando el esquema negocio de la actual)
Ejecutar ./guarani migrar_base

Saludos.

si, me equivoque con el punto 1.

Esta es la salida que estoy teniendo:

Migrando la base de la versi▒n 3.15.0 hasta la versi▒n 3.16.2
 Actualizando BD de negocios a version 3.15.1

 Actualizando BD de negocios a version 3.16.0
 Ejecutando Archivo: 001118.sql
. Ejecutando Archivo: 001119.sql
. Ejecutando Archivo: 001120.sql
. Ejecutando Archivo: 001121.sql
. Ejecutando Archivo: 001122.sql
. Ejecutando Archivo: 001123.sql
. Ejecutando Archivo: 001124.sql
. Ejecutando Archivo: 001125.sql
. Ejecutando Archivo: 001126.sql
. Ejecutando Archivo: 001127.sql
. Ejecutando Archivo: 001128.sql
. Ejecutando Archivo: 001129.sql
. Ejecutando Archivo: 001130.sql
. Ejecutando Archivo: 001131.sql
. Ejecutando Archivo: 001132.sql
. Ejecutando Archivo: 001133.sql
. Ejecutando Archivo: 001134.sql
. Ejecutando Archivo: 001135.sql
. Ejecutando Archivo: 001136.sql

ERROR ejecutando SQL:
 [CODIGO]: 7
 [SQLSTATE]: db_23505
 [MENSAJE]: ERROR:  duplicate key value violates unique constraint "pk_sga_requisitos_aplanado"
DETAIL:  Key (requisito_accion, plan_version)=(74, 101) already exists.
CONTEXT:  SQL statement "INSERT INTO sga_requisitos_aplanado (requisito_accion, plan_version)
    SELECT a.requisito_accion, t.plan_version
      FROM sga_requisitos_x_accion as a,
           (SELECT c.plan_version
             FROM sga_requisitos_x_accion as b
              JOIN sga_requisitos_aplanado as c ON c.requisito_accion = b.requisito_accion
            WHERE b.requisito = 58
              AND b.grupo_requisito in (select grupo_requisito from sga_requisitos_grupos where accion = 2)
            ) as t
     WHERE a.requisito = 99
       AND a.grupo_requisito in (select grupo_requisito from sga_requisitos_grupos where accion = 2)"
PL/pgSQL function inline_code_block line 59 at SQL statement
 [SQL EJECUTADA]: -- +++++++++++++++++++++++++++++++++++++++
-- Script de conversi▒n  001136.sql
-- +++++++++++++++++++++++++++++++++++++++
--BEGIN WORK;


DO $BODY$
DECLARE cant INTEGER;
BEGIN

SELECT count(*) INTO cant FROM sga_requisitos WHERE requisito = 98;

IF cant = 0 THEN

  -- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  -- Tabla: sga_requisitos, sga_requisitos_validos
  -- Versi▒n: 3.16.0
  -- Control: Verificar si el alumno tiene las correlativas para aprobar en un examen regular
  --          Usa la misma regla (308) del requisito nro 58 - "Correlativas de Aprobacion"
  -- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  INSERT INTO sga_requisitos (requisito, requisito_tipo, nombre, requisito_subordinado_de, descripcion, regla)
     VALUES (98, 5, 'Correlativas de Aprobaci▒n - Examen Regular', NULL, 'Tener las correlativas para aprobar una actividad.       ', 308);

  INSERT INTO sga_requisitos_validos (accion, requisito) VALUES (2, 98); -- Examenes

  -- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  -- Tabla: sga_requisitos, sga_requisitos_validos
  -- Versi▒n: 3.16.0
  -- Control: Verificar si el alumno tiene las correlativas para aprobar en un examen libre
  --          Usa la misma regla (308) del requisito nro 58 - "Correlativas de Aprobacion"
  -- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  INSERT INTO sga_requisitos (requisito, requisito_tipo, nombre, requisito_subordinado_de, descripcion, regla)
     VALUES (99, 5, 'Correlativas de Aprobaci▒n - Examen Libre', NULL, 'Tener las correlativas para aprobar una actividad.',        308);

  INSERT INTO sga_requisitos_validos (accion, requisito) VALUES (2, 99); -- Examenes

  -- Inserto el requisito 98 en el punto de control 10
  INSERT INTO sga_requisitos_x_punto_control (pto_control, requisito, orden) VALUES (10, 98, 1);

  -- Reordeno los requisitos.
  UPDATE sga_requisitos_x_punto_control SET orden = 2 WHERE pto_control = 10 AND requisito = 69;
  UPDATE sga_requisitos_x_punto_control SET orden = 3 WHERE pto_control = 10 AND requisito = 74;


  -- Inserto el requisito 99 en el punto de control 11
  INSERT INTO sga_requisitos_x_punto_control (pto_control, requisito, orden) VALUES (11, 99, 1);

  -- Reordeno los requisitos en cada punto de control
  UPDATE sga_requisitos_x_punto_control SET orden = 2 WHERE pto_control = 11 AND requisito = 76;


  -- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  -- En la configuracion de requisitos x accion, cambio el requisito actual 58 por el 98
  -- Para la configuraci▒n de requisitos de la accion 2-Examenes
  -- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  -- Copio la misma configuraci▒n del requisito 58 (ahora 98) en el requisito 99
  INSERT INTO sga_requisitos_x_accion (grupo_requisito, tipo, operador_not, requisito)
    SELECT grupo_requisito, tipo, operador_not, 99
      FROM sga_requisitos_x_accion
    WHERE requisito = 58
      AND grupo_requisito in (select grupo_requisito from sga_requisitos_grupos where accion = 2);

 -- Cargo el aplanado del requisito 99 copiandolo del requisito 58.
 INSERT INTO sga_requisitos_aplanado (requisito_accion, plan_version)
    SELECT a.requisito_accion, t.plan_version
      FROM sga_requisitos_x_accion as a,
           (SELECT c.plan_version
             FROM sga_requisitos_x_accion as b
              JOIN sga_requisitos_aplanado as c ON c.requisito_accion = b.requisito_accion
            WHERE b.requisito = 58
              AND b.grupo_requisito in (select grupo_requisito from sga_requisitos_grupos where accion = 2)
            ) as t
     WHERE a.requisito = 99
       AND a.grupo_requisito in (select grupo_requisito from sga_requisitos_grupos where accion = 2);

  -- Cambio requisito 58 x 98
  UPDATE sga_requisitos_x_accion
      SET requisito = 98
    WHERE requisito = 58
      AND grupo_requisito in (select grupo_requisito from sga_requisitos_grupos where accion = 2);


  -- Saca el requisito nro 58 de la accion nro 2 - Examenes
  DELETE FROM sga_requisitos_validos WHERE accion = 5 AND requisito = 58;

  -- Saco el requisito 58 - Correlativas de aprobacion del punto de control 17
  DELETE FROM sga_requisitos_x_punto_control WHERE pto_control = 17 AND requisito = 58;

  -- Cambio el orden de los controles en el punto de control 17 porque se sac▒ el requisito 58 que estaba al comienzo
  UPDATE sga_requisitos_x_punto_control SET orden = orden - 1 WHERE pto_control = 17;

-- Finalizacion del script
END IF;
END $BODY$;


-- COMMIT WORK;
-- +++++++++++++++++++++++++++++++++++++++
-- Fin Script de conversi▒n  001136.sql
-- +++++++++++++++++++++++++++++++++++++++


 Hubo errores en la migraci▒n.

 ___________________________________________________________________________________________________
 TIEMPO: 0,383 segundos

Podes enviar el resultado de estas querys?

  SELECT a.requisito_accion, t.plan_version
      FROM sga_requisitos_x_accion as a,
           (SELECT c.plan_version 
             FROM sga_requisitos_x_accion as b
              JOIN sga_requisitos_aplanado as c ON c.requisito_accion = b.requisito_accion
            WHERE b.requisito = 58
              AND b.grupo_requisito in (select grupo_requisito from sga_requisitos_grupos where accion = 2)
            ) as t 
     WHERE a.requisito = 58
       AND a.grupo_requisito in (select grupo_requisito from sga_requisitos_grupos where accion = 2)
ORDER BY 1,2;

SELECT c.plan_version 
   FROM sga_requisitos_x_accion as b
   JOIN sga_requisitos_aplanado as c ON c.requisito_accion = b.requisito_accion
    WHERE b.requisito = 58
      AND b.grupo_requisito in (select grupo_requisito from sga_requisitos_grupos where accion = 2);

Hola Ale,
Me devuelve más de 1600 registros…te los paso?

No, entonces te paso otra consulta, veamos si existen registros duplicados (pense que serian menos…)

SELECT a.requisito_accion, t.plan_version, COUNT(*)
      FROM sga_requisitos_x_accion as a,
           (SELECT c.plan_version 
             FROM sga_requisitos_x_accion as b
              JOIN sga_requisitos_aplanado as c ON c.requisito_accion = b.requisito_accion
            WHERE b.requisito = 58
              AND b.grupo_requisito in (select grupo_requisito from sga_requisitos_grupos where accion = 2)
            ) as t 
     WHERE a.requisito = 58
       AND a.grupo_requisito in (select grupo_requisito from sga_requisitos_grupos where accion = 2)
GROUP BY 1, 2
HAVING COUNT(*) > 1
ORDER BY 1,2;

Esa devuelve unos 500 registros…

Esta tambien devuelve duplicados?

SELECT c.plan_version , count(*)
 FROM sga_requisitos_x_accion as b
  JOIN sga_requisitos_aplanado as c ON c.requisito_accion = b.requisito_accion
   WHERE b.requisito = 58
      AND b.grupo_requisito in (select grupo_requisito from sga_requisitos_grupos where accion = 2)
GROUP BY 1
HAVING COUNT(*) > 1;

Si esta es la que devuelve duplicados, entonces en script de conversión de la base 001136.sql en la linea 68, donde dice:

(SELECT c.plan_version 

agregale el DISTINCT

(SELECT DISTINCT c.plan_version 

Perfecto, ahi funciono la conversión.

Para cerrar, se trata de un tema de nuestros datos? O cual es la causa?

Es por como tienen configurado los requisitos. Puede ser porque tienen definidos requisitos por perfil de datos o ese requisito definido mas de una vez en la acción “Examenes”, cosa que no contemplamos al realizar este script de conversion, que agregando el DISTINCT se resuelve.

Jose, vuelvo sobre este tema. Hicimos el pasaje de la base de negocios, pero encontramos problemas con los perfiles , evidentemente tambien es necesario pasar la base de TOBA y la de logs. Me podrás confirmar esto?

Buenas Claudio, para no tener que hacer eso podes volver a crearlos, sino si necesitarías un dump del esquema de toba. desarrollo y desarrollo_logs.
Saludos.

José:
Siguiendo con este tema, para migrar sólo la base desde una 3.15.1.
Si hago un dump de toda la base con todos los esquemas, incluido desarrollo, debería después hacer ./guarani regenerar?
Gracias

Buenas Ana, Si tu idea es usar esa base para la instalación que hagas con una base actualizada, si deberías correr ese comando.

Saludos.

Mi idea es usar la app 3.16.2 que ya tengo instalada en una maquina virtual y actualizar la base desde producción que tengo la 3.15.1. De esta forma solo actualizo el servidor de base de datos y no el d e la aplicación.
Pero tengo muchos perfiles de datos y funcionales, y no quiero volver a cargarlos.
Sino tendría que volver hacer el versionado de la app desde la 3.15.1.