Duarte,<br><br>Não, não funciona.<br>Experimentei criar o trigger para a 2ª tabela, para o after insert (é a unica operação que existe nesta 2ª tabela) enviar o email para o ultimo endereço de email inserido e manda para o penúltimo.<br>
O que se passa é que uma vez que o ultimo insert só acontece de facto (commit) depois de estes triggers terem acabado, ele vai buscar o registo que para ele é o último.<br>Daí pretender utilizar o script do primeiro trigger, onde consigo ir buscar o novo valor de email, mesmo que ainda não tenha sido feito o commit na BD.<br>
Esse primeiro trigger tem o seguinte código:<br><br>CREATE OR REPLACE FUNCTION sde.A() RETURNS TRIGGER AS $A$<br> BEGIN<br><br> IF (TG_OP = 'UPDATE') THEN<br> <br> -- insiro na tabela teste_1_audit os valores novos da tabela teste_1<br>
INSERT INTO sde.teste_1_audit SELECT 'u', now(), user, <u><b>NEW.email</b></u>;<br> RETURN NEW;<br> <br> END IF;<br> <br> END;<br>$A$ LANGUAGE plpgsql;<br><br>CREATE TRIGGER A<br>
AFTER UPDATE ON sde.teste_1<br> FOR EACH ROW EXECUTE PROCEDURE sde.A();<br><br>Repara que o NEW.email é o novo email e este é passado para a 2ª tabela correctamente.<br>Se eu conseguisse pôr esta mesma função no script de envio de email (em python) penso que teria o problema resolvido. Para isso experimentei o seguinte código:<br>
<br>CREATE OR REPLACE FUNCTION sde.py() RETURNS TRIGGER AS $py_$<br><br>import smtplib<br>import psycopg2<br>SMTP_SERVER = '<a href="http://smtp.gmail.com">smtp.gmail.com</a>'<br>SMTP_PORT = 587<br>sender = '<a href="mailto:xxxx@xxxx.com">xxxx@xxxx.com</a>'<br>
password = 'yyyyyy'<br>conn_string = "host='localhost' dbname='sde' user='postgres' password='xxxxxx'"<br>connection = psycopg2.connect(conn_string)<br>cursor = connection.cursor()<br>
SQL = """<br>CREATE OR REPLACE FUNCTION sde.C() RETURNS TRIGGER AS $PY_$<br> BEGIN<br><br> IF (TG_OP = 'UPDATE') THEN<br> <br> SELECT NEW.francisco FROM SDE.TESTE_1;<br> RETURN NEW;<br>
<br> END IF;<br> <br> END;<br>$PY_$ LANGUAGE plpgsql;<br>"""<br>cursor.execute(SQL)<br>recipient = cursor.fetchone()[0]<br><br>subject = 'Candidatura'<br>body = 'bla bla bla'<br>
<br>"Sends an e-mail to the specified recipient."<br> <br>body = "" + body + ""<br> <br>headers = ["From: " + sender,<br> "Subject: " + subject,<br> "To: " + recipient,<br>
"MIME-Version: 1.0",<br> "Content-Type: text/html"]<br>headers = "\r\n".join(headers)<br> <br>session = smtplib.SMTP("<a href="http://smtp.gmail.com">smtp.gmail.com</a>", 587)<br>
<br>session.ehlo()<br>session.starttls()<br>session.ehlo<br>session.login(sender, password)<br> <br>session.sendmail(sender, recipient, headers + "\r\n\r\n" + body)<br>session.quit()<br>$py_$ LANGUAGE plpythonu;<br>
<br><br>CREATE TRIGGER py_<br>AFTER UPDATE ON SDE.TESTE_1<br> FOR EACH ROW EXECUTE PROCEDURE sde.py();<br><br>Aqui o problema é que a variável fica sem valor.<br>Dá o erro:<br>DETAIL: <class 'psycopg2.ProgrammingError'>: no results to fetch<br>
<br>Se este script funcionar, penso que fico com o problema resolvido...<br>Espero ter-me feito entender...<br><br>Obrigado mais uma vez!<br><br>Filipe<br><br><div class="gmail_quote">2012/7/10 duartecarreira <span dir="ltr"><<a href="mailto:dncarreira@gmail.com" target="_blank">dncarreira@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Filipe, não percebo uma coisa.<br>
<br>
Se criares um trigger na 2ª tabela, isso não funciona? Ou seja, um novo<br>
after update mas na 2ª tabela? Pelo que vejo, a 2ª tabela também tem o<br>
email...<br>
<br>
Duarte<br>
<br>
--<br>
View this message in context: <a href="http://osgeo-org.1560.n6.nabble.com/Postgresql-tp4987061p4987174.html" target="_blank">http://osgeo-org.1560.n6.nabble.com/Postgresql-tp4987061p4987174.html</a><br>
Sent from the OSGeo Portuguese Local Chapter mailing list archive at Nabble.com.<br>
<div class="HOEnZb"><div class="h5">_______________________________________________<br>
Portugal mailing list<br>
<a href="mailto:Portugal@lists.osgeo.org">Portugal@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/portugal" target="_blank">http://lists.osgeo.org/mailman/listinfo/portugal</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><font style="background-color:rgb(255,255,255);color:rgb(0,0,102)" size="1"><span style="font-family:verdana,sans-serif"><b><font>Filipe Brandão<br><br><img src="https://4906690198525778116-a-1802744773732722657-s-sites.googlegroups.com/site/fgbrandao/logo/LogoNovoEMEPC.png?attachauth=ANoY7cow2MOLgCTZ5bQ0BQuulng4GMUIikLGAabHA7bLeX2tOm2bJZWEq8yvWz6wcmODj4_8m3fLjw1I4juMxb--jNsbH3FiO7lgYDjDFH1aE9IBT54UfDFquMQxQ8wczzFgveGRY56oJPC64vcUwt0TvvT424cVWefjtGWSHDDM0PU0g_09az-keKCgjCdS6Onc__B3M_vSRHfG01UTUks2lKYaeMKWkQ%3D%3D&attredirects=0" height="111" width="420"><br>
</font></b><br>Gabinete de Geomática</span><br style="font-family:verdana,sans-serif"><span style="font-family:verdana,sans-serif">
E-mail: </span><a style="font-family:verdana,sans-serif" href="mailto:fgbrandao@am-em.org" target="_blank">fgbrandao@emepc-portugal.org</a><br style="font-family:verdana,sans-serif"><span style="font-family:verdana,sans-serif">
Ext. interna: 204176 </span><br style="font-family:verdana,sans-serif"><span style="font-family:verdana,sans-serif">Estrutura de Missão para a Extensão da Plataforma Continental / Task Group for the Extension of the Portuguese Continental Shelf</span><br style="font-family:verdana,sans-serif">
<a style="font-family:verdana,sans-serif" href="http://www.emam.com.pt/" target="_blank">http://www.emam.com.pt/</a><br style="font-family:verdana,sans-serif"><span style="font-family:verdana,sans-serif">
Rua Costa Pinto 165,</span><br style="font-family:verdana,sans-serif"><span style="font-family:verdana,sans-serif">
2770-047 Paço de Arcos, Portugal</span><br style="font-family:verdana,sans-serif"><span style="font-family:verdana,sans-serif">
Telefone: 213 804 250, 213 004 165 Fax: 213 905 225</span></font><span style="background-color:rgb(255,255,255);color:rgb(0,0,102)"></span><br>