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