Hola, esto me llevo mucho tiempo de hacer, el que tenga el mismo problema lo subo por aquí, pero yo tuve muchos repetidos y no se podía hacer la migración. Para terminar con la migración tuve que agregar unas cuantas lineas al sql del mensaje.
-- +++++++++++++++++++++++++++++++++++++++
-- Script de conversión 001238.sql
-- +++++++++++++++++++++++++++++++++++++++
-- Borro causas de perdida de regularidad (requisitos/reglas) que estan duplicadas por migracion desde Guarani 2.
-- Dejo solo una, la que se importó primero (con menor id)
CREATE TEMP TABLE _Tduplicados (nombre varchar(100), regla integer, causa_perdida_reg integer);
INSERT INTO _Tduplicados (nombre, regla)
SELECT nombre, regla
FROM sga_perdida_regularidad_causas
GROUP BY nombre, regla
HAVING COUNT(*) > 1
UNION
SELECT nombre, regla
FROM sga_perdida_regularidad_causas
GROUP BY nombre, regla
HAVING COUNT(*) = 1;
UPDATE _Tduplicados
SET causa_perdida_reg = (SELECT MIN(causa_perdida_reg)
FROM sga_perdida_regularidad_causas
WHERE nombre = _Tduplicados.nombre
AND regla = _Tduplicados.regla
);
-- PERSONALIZACION DE UNSE
-- Creamos un temporal de sga_perdidas_regularidad_det para poder hacer la actualizacion
CREATE TEMP table bak_perdida_regularidad_det (perdida_regularidad integer, causa_perdida_reg integer, motivo_solucion character varying(255));
INSERT INTO bak_perdida_regularidad_det SELECT * FROM sga_perdida_regularidad_det;
-- A todas las causas de perdida de regularidad con la misma regla, defino el ID de causa de perdida de regularidad menor recuperado antes.
UPDATE bak_perdida_regularidad_det
SET causa_perdida_reg = t.causa_perdida_reg
FROM sga_perdida_regularidad_causas as a,
_Tduplicados as t
WHERE a.causa_perdida_reg = bak_perdida_regularidad_det.causa_perdida_reg
AND t.nombre = a.nombre
AND t.regla = a.regla
AND bak_perdida_regularidad_det.causa_perdida_reg <> t.causa_perdida_reg;
-- Ahora eliminamos todos los registro de la tabla sga_perdida_regularidad_det
DELETE FROM sga_perdida_regularidad_det;
-- Cargamos toda la tabla nuevamente
INSERT INTO sga_perdida_regularidad_det SELECT DISTINCT on (perdida_regularidad, causa_perdida_reg) perdida_regularidad,
causa_perdida_reg, motivo_solucion FROM bak_perdida_regularidad_det;
DROP TABLE bak_perdida_regularidad_det;
-- FIN DE PERSONALIZACION UNSE
-- Borro causas de perdida de regularidad que no estan en la temporal
DELETE FROM sga_perdida_regularidad_causas
WHERE causa_perdida_reg NOT IN (SELECT causa_perdida_reg FROM _Tduplicados);
-- Quito el campo de la tabla y la ck
ALTER TABLE sga_perdida_regularidad_causas DROP CONSTRAINT IF EXISTS ck_sga_perdida_regularidad_causas_para_controlar;
ALTER TABLE sga_perdida_regularidad_causas DROP COLUMN IF EXISTS para_controlar;
-- Creo nueva tabla de configuracion de requisitos de regularidad por propuesta y ubicacion
-- Borro tabla temporal
DROP TABLE _Tduplicados;
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- SIU-GUARANI 3 - Sistema de Gestión Académica
-- Versión 3.17.0
-- Tabla: sga_propuestas_regularidad
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- DROP TABLE IF EXISTS sga_propuestas_regularidad;
CREATE TABLE sga_propuestas_regularidad
(
propuesta Integer NOT NULL,
ubicacion Integer NOT NULL,
causa_perdida_reg Integer NOT NULL,
para_controlar Smallint NOT NULL DEFAULT 0
);
-- ALTER TABLE sga_propuestas_regularidad DROP CONSTRAINT pk_sga_propuestas_regularidad;
ALTER TABLE sga_propuestas_regularidad ADD CONSTRAINT pk_sga_propuestas_regularidad PRIMARY KEY (propuesta,ubicacion,causa_perdida_reg,para_controlar);
Revoke all ON sga_propuestas_regularidad FROM public;
-- ++++++++++++++++++++++++++ Fin tabla sga_propuestas_regularidad +++++++++++++++++++++++++++++
GRANT select ON sga_propuestas_regularidad TO public;
GRANT update ON sga_propuestas_regularidad TO public;
GRANT delete ON sga_propuestas_regularidad TO public;
GRANT insert ON sga_propuestas_regularidad TO public;
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- SIU-GUARANI 3 - Sistema de Gestión Académica
-- Versión 3.17.0
-- Tabla: sga_propuestas_regularidad
-- Check: ck_sga_propuestas_regularidad_para_controlar
-- Valores: 0 = Regularidad y Readmision / 1 = Regularidad / 2 = Readmision
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- ALTER TABLE sga_propuestas_regularidad DROP CONSTRAINT ck_sga_propuestas_regularidad_para_controlar;
ALTER TABLE sga_propuestas_regularidad ADD CONSTRAINT ck_sga_propuestas_regularidad_para_controlar CHECK (para_controlar IN (0,1,2));
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- SIU-GUARANI 3 - Sistema de Gestión Académica
-- Versión 3.17.0
-- Tabla: sga_propuestas_regularidad
-- FK: fk_sga_propuestas_regularidad_sga_propuestas
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- DROP INDEX ifk_sga_propuestas_regularidad_sga_propuestas;
CREATE INDEX ifk_sga_propuestas_regularidad_sga_propuestas ON sga_propuestas_regularidad (propuesta);
-- ALTER TABLE sga_propuestas_regularidad DROP CONSTRAINT fk_sga_propuestas_regularidad_sga_propuestas;
ALTER TABLE sga_propuestas_regularidad
ADD CONSTRAINT fk_sga_propuestas_regularidad_sga_propuestas FOREIGN KEY (propuesta)
REFERENCES sga_propuestas (propuesta) ON UPDATE NO ACTION ON DELETE NO ACTION;
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- SIU-GUARANI 3 - Sistema de Gestión Académica
-- Versión 3.17.0
-- Tabla: sga_propuestas_regularidad
-- FK: fk_sga_propuestas_regularidad_sga_ubicaciones
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- DROP INDEX ifk_sga_propuestas_regularidad_sga_ubicaciones;
CREATE INDEX ifk_sga_propuestas_regularidad_sga_ubicaciones ON sga_propuestas_regularidad (ubicacion);
-- ALTER TABLE sga_propuestas_regularidad DROP CONSTRAINT fk_sga_propuestas_regularidad_sga_ubicaciones;
ALTER TABLE sga_propuestas_regularidad
ADD CONSTRAINT fk_sga_propuestas_regularidad_sga_ubicaciones FOREIGN KEY (ubicacion)
REFERENCES sga_ubicaciones (ubicacion) ON UPDATE NO ACTION ON DELETE NO ACTION;
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- SIU-GUARANI 3 - Sistema de Gestión Académica
-- Versión 3.17.0
-- Tabla: sga_propuestas_regularidad
-- FK: fk_sga_propuestas_regularidad_sga_perdida_regularidad_causas
-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- DROP INDEX ifk_sga_propuestas_regularidad_sga_perdida_regularidad_causas;
CREATE INDEX ifk_sga_propuestas_regularidad_sga_perdida_regularidad_causas ON sga_propuestas_regularidad (causa_perdida_reg);
-- ALTER TABLE sga_propuestas_regularidad DROP CONSTRAINT fk_sga_propuestas_regularidad_sga_perdida_regularidad_causas;
ALTER TABLE sga_propuestas_regularidad
ADD CONSTRAINT fk_sga_propuestas_regularidad_sga_perdida_regularidad_causas FOREIGN KEY (causa_perdida_reg)
REFERENCES sga_perdida_regularidad_causas (causa_perdida_reg) ON UPDATE NO ACTION ON DELETE NO ACTION;
-- +++++++++++++++++++++++++++++++++++++++
-- Fin Script de conversión 001238.sql
-- +++++++++++++++++++++++++++++++++++++++