Matheus eu consigo usar o mesmo esquema utilizando o dblink, porque essas 
tabelas estão em bancos diferentes????



Segue mais ou menos que estou tentando fazer mesmo.



create or replace function insert_processo() returns trigger as

$$

begin

  select  * from dblink_exec

                            ('dbname=igobal_bk

                              hostaddr=172.16.42.13

                              user=postgres

                              password=04474180

                              port=5432',

    'INSERT INTO matheus

    VALUES((NEW).*)');

  return new;

end;

$$ language 'plpgsql';







create trigger insert_processo_tri before insert on matheus2

  for each row execute procedure insert_processo();







De: pgbr-geral [mailto:[email protected]] Em nome de 
Matheus Ferreira
Enviada em: quinta-feira, 26 de fevereiro de 2015 09:55
Para: 'Comunidade PostgreSQL Brasileira'
Assunto: [pgbr-geral] RES: Função de inserção





Matheus eu consigo usar o mesmo esquema utilizando o dblink, porque essas 
tabelas estão em bancos diferentes.





De: pgbr-geral [mailto:[email protected]] Em nome de 
Matheus de Oliveira
Enviada em: quinta-feira, 26 de fevereiro de 2015 09:49
Para: Comunidade PostgreSQL Brasileira
Assunto: Re: [pgbr-geral] Função de inserção







2015-02-26 9:29 GMT-03:00 Matheus Ferreira <[email protected] 
<mailto:[email protected]> >:

Bom Dia pessoal



Estou tentando realizar uma função disparada por uma trigger, essa função deve 
inserir os mesmo valores da última inserção realizada de uma tabela para outra 
tabela.

Sendo o último insert realizado na tabela processo2 para tabela processo.

--------------------------------------------------------

CREATE TABLE processo2

(

  idprocesso integer NOT NULL,

  nrprocesso character varying(35)

)



CREATE TABLE processo

(

  idprocesso integer NOT NULL,

  nrprocesso character varying(35)

)





---------------------------------------------------------------



create or replace function insert_processo() returns trigger as

$$

begin

  INSERT INTO processo

select * from processo2





Dessa forma você está pegando tudo da tabela "processo2" e inserindo em 
"processo", o que você precisa é usar a variável NEW dentro da função:

    INSERT INTO processo(idprocesso, nrprocesso)

    VALUES(NEW.idprocesso, NEW.nrprocesso);

Se houver 100% de garantia que as tabelas possuem o mesmo esquema (geralmente 
não há), você pode usar o seguinte truque também:

    INSERT INTO processo

    VALUES((NEW).*);

create trigger insert_processo_tri before insert on processo2

  for each row execute procedure insert_processo();



Nesse caso me parece que a trigger deveria ser do tipo AFTER, assim você 
garante que o registro foi inserido.

Atenciosamente,

--

Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres <http://www.dextra.com.br/postgres/>



  _____


 <http://www.avast.com/>

Este email foi escaneado pelo Avast antivírus.
www.avast.com <http://www.avast.com/>





---
Este email foi escaneado pelo Avast antivírus.
http://www.avast.com
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a