Olá Yoshio,

nós utilizamos Rules para registrar logs de update e delete nas tabelas.
O insert fica valendo o próprio registro, se não existir log de update 
significa que o registro foi incluído da forma como está na tabela.

As Rules são geradas durante o processo de atualização de versões (cria 
campos, tabelas, índices, triggers.... processo já discutido aqui).
Sempre que atualizamos a versão do sistema, é rodado o processo que cria 
elas...

Não sei se é a melhor maneira, mas preferimos Rules ao invés de Triggers 
para separar os logs das triggers...

Abaixo um exemplo em uma tabela com dois campos.


Att,

Celso Lorenzetti.
www.sysrs.com.br


CREATE TABLE mercados
(
  mer_mercado numeric(5) NOT NULL, -- Código do mercado para vendas
  mer_nome character varying(50) NOT NULL, -- Nome do mercado para vendas
  CONSTRAINT pk_mercados PRIMARY KEY (mer_mercado)
)
WITHOUT OIDS;


CREATE OR REPLACE RULE mercados_d AS
    ON DELETE TO mercados DO  INSERT INTO log (log_tabela, log_acao, 
usr_usuario, log_log)
  VALUES ('MERCADOS'::character varying, 'D'::character varying, 
fc_usuario(), ('[MER_MERCADO='::text || old.mer_mercado::text) || 
']'::text);

CREATE OR REPLACE RULE mercados_u AS
    ON UPDATE TO mercados DO  INSERT INTO log (log_tabela, log_acao, 
usr_usuario, log_log)
  VALUES ('MERCADOS'::character varying, 'U'::character varying, 
fc_usuario(), (('[MER_MERCADO='::text || old.mer_mercado::text) || '] 
'::text) ||
        CASE
            WHEN new.mer_nome::text <> old.mer_nome::text THEN 
((('MER_NOME='::text || old.mer_nome::text) || '->'::text) || 
new.mer_nome::text) || ', '::text
            ELSE ''::text
        END);

----- Original Message ----- 
From: "Yoshio" <[EMAIL PROTECTED]>
To: "Comunidade PostgreSQL Brasileira" <[email protected]>
Sent: Monday, June 23, 2008 7:26 AM
Subject: [pgbr-geral] Concatenar vários campos com delimitador


Olá pessoal.
Como faço para concatenar vários campos (linha) delimitados com algum
caracter em uma string dentro de uma trigger? O problema está no fato
de não saber a quantidade de campos (nem os tipos) que seriam
concatenados, pois a idéia é concatenar qualquer linha de qualquer
tabela. Gostaria de fazer isto sem ter que fazer selects em tabelas
catalogs nem usar loops. Existe alguma função para fazer isso?

So para informar, a idéia é poder registrar as alterações nas tabelas
como um histórico simples, indicando o se foi insert, update ou
delete. Estava pensando em aumentar o nivel do log do postgre mas acho
que iria ficar muito pesado. Estou aceitando idéias também. Quem puder
ajudar, obrigado.
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral 

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a