[pgbr-geral] Problemas com Triggers
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: avozdoevangelhoTwitter: 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
Re: [pgbr-geral] Problemas com Triggers
2011/4/6 Nilson Chagas nilson.chagas.si...@gmail.com: 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. O código não faz muita diferença, a não ser que esteja ruim. O que precisa mesmo é de um perfil de execução, ou pelo menos do plano de execução. 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. Creio que um bom índice teria o mesmo efeito. Não seria otimização prematura? -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (61) 3546 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 9406 7191 ICQ/AIM: aim:GoIM?screenname=61287803 BRAZIL GMT-3 MSN: msnim:chat?contact=lean...@dutra.fastmail.fm ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Problemas com Triggers
2011/4/6 Leandro DUTRA leandro.gfc.du...@gmail.com 2011/4/6 Nilson Chagas nilson.chagas.si...@gmail.com: 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. O código não faz muita diferença, a não ser que esteja ruim. O que precisa mesmo é de um perfil de execução, ou pelo menos do plano de execução. 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. Creio que um bom índice teria o mesmo efeito. Não seria otimização prematura? Temos uma base de noticias, muito grande, para não correr o risco que tinhamos no mysql na versão anterior do site, que ficava um tempão para trazer estes dados a tela, optei por trabalhar com uma massa de dados menor. Mas posso pegar a view que alimenta a trigger e substituir na tela e ver como fica. Vou fazer isto. -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (61) 3546 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 9406 7191ICQ/AIM: aim:GoIM?screenname=61287803 BRAZIL GMT-3 MSN: msnim:chat?contact=lean...@dutra.fastmail.fm ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- []s Nilson Chagas - Ubuntu User 25794 --- Visite: http://www.avozdoevangelho.com.br - Peça gratuitamente um curso Bíblico Twitter: avozdoevangelhoTwitter: 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