Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Crear una tabla espejo para la tabla Transaccin en otra particin, sincronizada con la tabla principal, de tal manera que si se ingresa, se modifica o se borra filas en la tabla principal, se reflejen esos cambios en forma automtica en la tabla imagen.
--creamos la particion create tablespace espejo location 'D/espejo:'; --creamos el la tabla create table transaccion_espejo( )inherits (transaccion) on espejo;
TRIGGER
CREATE OR REPLACE FUNCTION insert_tra() RETURNS TRIGGER AS $$ BEGIN INSERT INTO transaccion_espejo VALUES(NEW.*); RETURN NULL; END; $$ LANGUAGE plpgsql; CREATE TRIGGER insert_tra BEFORE INSERT ON transaccion FOR EACH ROW EXECUTE PROCEDURE insert_tra(); create or replace function mirror() returns trigger as $mirror_table$ begin if (tg_op = 'update') then update transaccion_espejo set id_transaccion = new.id_transaccion, id_cuenta = new.id_cuenta, tipo = new.tipo, fecha = new.fecha, cantidad = new.cantidad where id_transaccion = old.id_transaccion; elsif (tg_op = 'delete') then delete from transaccion_espejo where id_transaccion = old.id_transaccion; if not found then return null;end if; end if;
return null; end; $mirror_table$ language plpgsql; create trigger mirror_table after update or delete on transaccion for each row execute procedure mirror();
Realizar una fragmentacin horizontal de la tabla TRANSACCIN, todas las transacciones que son "DEPSITOS" se ubican en una particin y en resto en otra. Las dos partes de la tabla se guardan en archivos diferentes.
--creamos la particion create tablespace deposito location 'D/deposito:'; --creamos las tablas de la fragmentacin vertical create table transaccion_deposito( check(tipo='D') )inherits (transaccion) on deposito; create table transaccion_retiro( check(tipo='R') )inherits (transaccion);
TRIGGER
CREATE OR REPLACE FUNCTION dividir_transaccion() RETURNS TRIGGER AS $$ BEGIN IF ( NEW.tipo = 'D' ) THEN INSERT INTO transaccion_deposito VALUES (NEW.*); ELSIF ( NEW.tipo = 'R' ) THEN INSERT INTO transaccion_retiro VALUES (NEW.*); ELSE RAISE EXCEPTION 'No es deposito ni retiro'; END IF; RETURN NULL; END; $$ LANGUAGE plpgsql; CREATE TRIGGER dividir_transaccion BEFORE INSERT ON transaccion FOR EACH ROW EXECUTE PROCEDURE dividir_transaccion()
Agregar el atributo Foto en la tabla Clientes, luego, realizar una fragmentacin vertical de dicha tabla, ubicando el cdigo del cliente y su foto en una particin, y el resto de datos de cliente en la otra particin. Cmo visualizar una foto de un cliente, que est almacenada en la base de datos?
--afregamos la foto a la tabla cliente alter table cliente add foto bytea; --freagmentacion vertical create table cliente_foto ( id int primary key, foto bytea ) create table cliente_datos ( id int primary key, ci char(10), nombre varchar(15), apellido varchar(15) )