Olá, George

Fiz um exemplo bem simples.
Derrepente ajude.

CREATE TABLE exemplo1(codigo int,nome text);

CREATE TABLE exemplo2(codigo_modif int,data_hora timestamp);

CREATE OR REPLACE FUNCTION exemplo_trigger()
RETURNS trigger AS $exemplo_trigger$
BEGIN
        INSERT INTO exemplo2 VALUES (NEW.codigo,current_date);
        RETURN NEW;
END;
$exemplo_trigger$ LANGUAGE PLPGSQL;

CREATE TRIGGER exemplo_trigger
BEFORE INSERT ON exemplo1
FOR EACH ROW EXECUTE PROCEDURE exemplo_trigger();

postgres=# SELECT * FROM exemplo1;
codigo | nome
--------+------
(0 rows)

postgres=# SELECT * FROM exemplo2;
codigo_modif | data_hora
--------------+-----------
(0 rows)

INSERT INTO exemplo1 VALUES (1,'Jota');

postgres=# SELECT * FROM exemplo1;
codigo | nome
--------+------
      1 | Jota
(1 row)

postgres=# SELECT * FROM exemplo2;
codigo_modif |      data_hora
--------------+---------------------
            1 | 2009-01-27 00:00:00
(1 row)

Agora desabilito a trigger.

ALTER TABLE exemplo1 DISABLE TRIGGER exemplo_trigger;

postgres=# INSERT INTO exemplo1 VALUES (2,'Joao Paulo');
INSERT 0 1

postgres=# SELECT * FROM exemplo1;
codigo |    nome
--------+------------
      1 | Jota
      2 | Joao Paulo
(2 rows)

postgres=# SELECT * FROM exemplo2;
codigo_modif |      data_hora
--------------+---------------------
            1 | 2009-01-27 00:00:00
(1 row)

Habilitando a trigger novamente.

postgres=# ALTER TABLE exemplo1 ENABLE TRIGGER exemplo_trigger;
ALTER TABLE

postgres=# INSERT INTO exemplo1 VALUES (3,'JotaPe');
INSERT 0 1

postgres=# SELECT * FROM exemplo1;
codigo |    nome
--------+------------
      1 | Jota
      2 | Joao Paulo
      3 | JotaPe
(3 rows)

postgres=# SELECT * FROM exemplo2;
codigo_modif |      data_hora
--------------+---------------------
            1 | 2009-01-27 00:00:00
            3 | 2009-01-27 00:00:00
(2 rows)

Desabilitando o trigger para o usuário.

postgres=# SELECT user;
current_user
--------------
 postgres
(1 row)

postgres=# ALTER TABLE exemplo1 DISABLE TRIGGER USER;
ALTER TABLE

postgres=# INSERT INTO exemplo1 VALUES (4,'Teste');
INSERT 0 1

postgres=# SELECT * FROM exemplo1;
codigo |    nome
--------+------------
      1 | Jota
      2 | Joao Paulo
      3 | JotaPe
      4 | Teste
(4 rows)

postgres=# SELECT * FROM exemplo2;
codigo_modif |      data_hora
--------------+---------------------
            1 | 2009-01-27 00:00:00
            3 | 2009-01-27 00:00:00
(2 rows)

Habilitando novamente a trigger para o usuário.

postgres=# ALTER TABLE exemplo1 ENABLE TRIGGER USER;
ALTER TABLE

postgres=# SELECT * FROM exemplo1;
codigo |    nome
--------+------------
      1 | Jota
      2 | Joao Paulo
      3 | JotaPe
      4 | Teste
      5 | PostgreSQL
(5 rows)

postgres=# SELECT * FROM exemplo2;
codigo_modif |      data_hora
--------------+---------------------
            1 | 2009-01-27 00:00:00
            3 | 2009-01-27 00:00:00
            5 | 2009-01-27 00:00:00
(3 rows)


Espero ter ajudado.

[]s


2009/1/27 Jota <[email protected]>:
> Olá, George
>
> Você pode postar o código do trigger e também explicar como você
> executou o procedimento?
>
> []s
>
> 2009/1/27 George <[email protected]>:
>> Bom dia,
>>
>> Faço um atualização diária no banco para somente testes conforme segue
>> abaixo :
>>
>> alter table financeiro.t1_cab disable trigger user;
>> update financeiro.t1_cab t3 set gds = (select t2.gds from t2_cab t1 inner
>> join gds_cab t2 on t2.gds = t1.gds where t1.tmv = t3.dsp limit 1);
>> alter table financeiro.t1_cab enable trigger user;
>>
>> Infelizmente ao tentar executar o update acabou executando a trigger da
>> tabela financeiro.t1_cab, para ter certeza coloquei um Raise Notice na
>> rotina;
>>
>> NOTICE:  teste
>> NOTICE:  teste
>> NOTICE:  teste
>> NOTICE:  teste
>>
>> Query returned successfully: 309263 rows affected, 93365 ms execution time.
>>
>> Como pode observar foi atualizado 309263 registros,mas registrou 4 linhas
>> que executou a trigger.
>>
>> Tb tentei com "disable trigger all". Utilizo a versao 8.2.
>>
>> O que fiz de errado ???
>>
>> Desde já agradeço
>>
>>
>> _______________________________________________
>> pgbr-geral mailing list
>> [email protected]
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>
>
>
> --
> João Paulo
> www.dextra.com.br/postgres
> PostgreSQL
>



-- 
João Paulo
www.dextra.com.br/postgres
PostgreSQL
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a