Estimados, cómo están?
Estamos armando un entorno de capacitación utilizando guarani 3.15 con datos limpios, y estamos borrando datos que fueron pruebas.
Por esto necesitamos saber como hacer para borrar un plan de estudio, si lo tengo que hacer sobre la db, que tablas debo tocar. En un caso debo borrar un plan entero que posee una version, y en otro caso una version de un plan.
Muchas gracias, saludos
Buenas tardes Gonzalo. Si queres una base limpia y nuevamente tener todo cargado podrías instalar la base de negocio de 0 con el comando guarani instalar.
Si quisieras una base con algunos datos podrías poner guarani instalar -j.
Si igualmente queres tener estos datos podrías borrar los datos como decís por base. Cuando pongas el 1° delete te va a ir restringiendo que no puede borrar porque tiene un dato en tal tabla.
La tabla principal es sga_planes.
Con esta query podes sacar a que tablas referencia la misma.
select conname as "Foreign Key",
t1.relname as "Tabla que referencia",
a1.attname as "Columna que referencia",
t2.relname as "Tabla referenciada",
a2.attname as "Columna referenciada"
from pg_constraint as c,
pg_class as t1,
pg_class as t2,
pg_attribute as a1,
pg_attribute as a2
where t2.relname in ('sga_planes')
-- and a2.attname = 'columna_referenciada'
-- and a2.attname <> a1.attname -- Para ver las referencias con nombres diferentes en las columnas relacionadas.
and c.conrelid = t1.relfilenode
and t2.relfilenode = c.confrelid
and a1.attrelid = t1.relfilenode
and a2.attrelid = t2.relfilenode
AND (
( c.conkey[1] = a1.attnum AND c.confkey[1] = a2.attnum ) OR
( c.conkey[2] = a1.attnum AND c.confkey[2] = a2.attnum ) OR
( c.conkey[3] = a1.attnum AND c.confkey[3] = a2.attnum ) OR
( c.conkey[4] = a1.attnum AND c.confkey[4] = a2.attnum ) OR
( c.conkey[5] = a1.attnum AND c.confkey[5] = a2.attnum ) OR
( c.conkey[6] = a1.attnum AND c.confkey[6] = a2.attnum ) OR
( c.conkey[7] = a1.attnum AND c.confkey[7] = a2.attnum ) OR
( c.conkey[8] = a1.attnum AND c.confkey[8] = a2.attnum ) OR
( c.conkey[9] = a1.attnum AND c.confkey[9] = a2.attnum ) OR
( c.conkey[10] = a1.attnum AND c.confkey[10] = a2.attnum )
)
order by 2
;
Si queres ver el modelo de datos podés verlo en el siguiente link Donde se accedé con las credenciales de colab.
Espero te ayude.
Saludos.
Buenas tardes Jose, muchas gracias por la pronta respuesta. De acuerdo al script que nos mandaste, chequeamos las tablas que relaciona, y fuimos chequeando si las tablas tenian datos, y al tratar de eliminar un registro sin relación de la tabla sga_elementos_plan, nos arroja el siguiente error… lo que llegamos a entender que es el delete fue parado por la función ftda_sga_elementos_plan.
ERROR: relation "sga_planes_versiones" does not exist
LINE 4: ... FROM sga_planes...
^
QUERY: SELECT sga_planes.propuesta,
sga_planes.plan,
sga_planes.estado,
sga_planes.tipo_plan FROM sga_planes_versiones,
sga_planes
WHERE sga_planes_versiones.plan = sga_planes.plan AND
sga_planes_versiones.plan_version = OLD.plan_version
CONTEXT: PL/pgSQL function negocio.ftda_sga_elementos_plan() line 8 at SQL statement
SQL state: 42P01
Aguardamos tus comentarios.
Buenos días Gonzalo,
Cuando armaste los scripts para el delete como lo armaste ?
Para que no te de ese error lo que deberías hacer es armar los deletes de la siguiente forma.
--Esto es para que sepa en que esquema debe trabajar en el borrado de las tablas y no tengas que anteponerle a cada tabla de que esquema es.
SET SEARCH PATH TO 'negocio';
DELETE FROM sga_tabla WHERE algo = algo;
Si armaste los delete con delete from negocio.tabla supongo que el error es por eso. Si te sigue dando error avisanos que puedo darte otra solución.
Saludos.
Gracias jose, era eso, yo estaba tratando de hacer el delete con schemma.table. Pude borrar los plan de estudios sin problemas!