Meus caros, Tenho 3 triggers que já utilizo a um bom tempo. Elas são responsaveis para alimentar 3 tabelas que tem informações resumidas que apareceram na home do site (www.saopaulofc.com.br)
De uns dias para ká, ao gravar a noticia no site, as 3 triggers tem demorado para atualizar, não entendi pq desta mudança de comportamento. Vou mostrar abaixo o codigo das triggers. Uma breve explicação, estas triggers foram criadas para que na Home onde tem um grande trafico, não precisasse ficar fazendo consultas SQL na massa de dados (tabela noticias), então na postagem da noticia, ele alimenta 3 tabelas que tem apenas o que realmente precisa aparecer na home do site. --- Tabela Noticia -> chamada das TRIGGERS ---------------------- CREATE TRIGGER tg_a_iud_noticia_seq01 AFTER INSERT OR UPDATE OR DELETE ON noticia FOR EACH ROW EXECUTE PROCEDURE fc_noticia_home(); COMMENT ON TRIGGER tg_a_iud_noticia_seq01 ON noticia IS 'Atualiza tabela que mostrará listagens da noticia no site.'; CREATE TRIGGER tg_a_iud_noticia_seq02 AFTER INSERT OR UPDATE OR DELETE ON noticia FOR EACH ROW EXECUTE PROCEDURE fc_botequim(); COMMENT ON TRIGGER tg_a_iud_noticia_seq02 ON noticia IS 'Atualiza tabela que mostrará o botequim.'; CREATE TRIGGER tg_a_iud_noticia_seq03 AFTER INSERT OR UPDATE OR DELETE ON noticia FOR EACH ROW EXECUTE PROCEDURE fc_destaque(); COMMENT ON TRIGGER tg_a_iud_noticia_seq03 ON noticia IS 'Atualiza tabela que mostrará as noticias em destaque.'; ----- CRIAÇÃO DA TRIGGER ------------ CREATE OR REPLACE FUNCTION fc_botequim() RETURNS trigger AS $BODY$begin DROP INDEX idx_mv_botequim_seq01; PERFORM refresh_matview('mv_botequim'); CREATE INDEX idx_mv_botequim_seq01 ON mv_botequim(not_data); RETURN NULL; end$BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION fc_botequim() OWNER TO dbspneta1; COMMENT ON FUNCTION fc_botequim() IS 'Seleciona o botequim do destaque'; ----- CRIAÇÃO DA TRIGGER ------------ CREATE OR REPLACE FUNCTION fc_noticia_home() RETURNS trigger AS $BODY$begin DROP INDEX idx_mv_noticia_home_seq01; PERFORM refresh_matview('mv_noticia_home'); CREATE INDEX idx_mv_noticia_home_seq01 ON mv_noticia_home(not_data); RETURN NULL; end$BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION fc_noticia_home() OWNER TO dbspneta1; COMMENT ON FUNCTION fc_noticia_home() IS 'Seleciona as noticias da home'; ----- CRIAÇÃO DA TRIGGER ------------ CREATE OR REPLACE FUNCTION fc_destaque() RETURNS trigger AS $BODY$begin DROP INDEX idx_mv_destaque_seq01; PERFORM refresh_matview('mv_destaque'); CREATE INDEX idx_mv_destaque_seq01 ON mv_destaque(not_data); RETURN NULL; end$BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION fc_destaque() OWNER TO dbspneta1; COMMENT ON FUNCTION fc_destaque() IS 'Seleciona as noticias do destaque'; A função refresh_matview, foi criada para atualizar a minha "materialize view", é uma função que já uso em outros pontos do banco de dados, e sempre funcionou perfeito. CREATE OR REPLACE FUNCTION refresh_matview(name) RETURNS void AS $BODY$ DECLARE matview_name ALIAS FOR $1; entry matview%ROWTYPE; BEGIN SELECT * INTO entry FROM matview WHERE mtv_name = matview_name; IF NOT FOUND THEN RAISE EXCEPTION 'Materialized view % does not exist.', matview_name; END IF; EXECUTE 'DELETE FROM ' || matview_name; EXECUTE 'INSERT INTO ' || matview_name || ' SELECT * FROM ' || entry.mtv_view; UPDATE matview SET mtv_lastrefr=CURRENT_TIMESTAMP WHERE mtv_name=matview_name; RETURN; END $BODY$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER COST 100; ALTER FUNCTION refresh_matview(name) OWNER TO dbspneta1; COMMENT ON FUNCTION refresh_matview(name) IS 'Atualização da materialized view'; Se alguém puder me ajudar eu agradeço. -- []s Nilson Chagas - Ubuntu User 25794 --- Visite: http://www.avozdoevangelho.com.br -> Peça gratuitamente um curso Bíblico Twitter: avozdoevangelho Twitter: matrixspnet http://www.amados.com.br http://bbnradio.org -> Ouça a rádio e faça gratuitamente um Curso Biblico On-Line
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral