Trazer apenas dado(s) alterado(s)

7 respostas
postgresql
L

No Postgres, estava criando uma funcao para os logs. Até aí sem muitos problemas, criei a funcao e a tabela com as colunas que vao armazenar os dados alterados/inseridos/apagados. Meu problema é que em uma das tabelas, por exemplo, tenho 14 colunas. Só que na tabela dos logs, em vez de trazer APENAS o(s) dado(s) que sofreu(sofreram) alteracao(alteracoes), traz tudo.

Para os inserts, ok. Mas, por exemplo, se apenas 1 dado de 1 coluna foi alterado, é complicado ver todos os dados das 14 colunas ali. Vira um jogo dos 7 erros pra saber o que foi alterado/apagado hahaha

A tabela dos logs tem essas colunas: schema, nome da tabela, nome do usuário que fez a alteracao, data/hora da alteracao, tipo de alteracao (insert, update ou delete), dado anterior, novo dado e a query.

A funcao tá assim (se sou novato em programacao, em banco muito mais. Peguei como base vários exemplos da internet e montei o código, me perdoem por qualquer erro idiota que possa ter):

DECLARE
v_old_data TEXT;
v_new_data TEXT;

BEGIN
IF(TG_OP = 'UPDATE') THEN
	v_old_data := ROW(OLD.*);
	v_new_data := ROW(NEW.*);
	
	INSERT INTO dadosalterados.logged_actions (schema_name, table_name, user_name, action, original_data, new_data, query)
	VALUES (TG_TABLE_SCHEMA::TEXT, TG_TABLE_NAME::TEXT, session_user::TEXT, substring(TG_OP, 1, 1), v_old_data, v_new_data, current_query());
	RETURN NEW;

Pra delete e insert o código segue o mesmo padrao.

Qual seria a maneira de trazer só, apenas, exclusivamente o que foi alterado/apagado? Abaixo a imagem de como sai. Como podem ver é uma bagunca que só, trazendo dados das 14 colunas, e nao apenas da(s) que foi(foram) alterada(s).

BancoDadosAlterados

7 Respostas

L

Ninguém tem ideia de como isso deve ser feito pra me dar uma luz?

rodriguesabner

http://www.postgresqltutorial.com/creating-first-trigger-postgresql/

L

Mano, já zerei o stackoverflow de tanto que eu procurei hahahahaha

Infelizmente tudo que tem de exemplo/conteúdo tem o mesmo problema, saem todos os dados em um mesmo campo.

O que eu fiz pra resolver foi simplesmente criar uma coluna na tabela dos logs pra cada coluna da tabela que eu quero ver, aí funciona tranquilo.

rodriguesabner

Essas functions não funcionaram?

L

Todas funcionam, mas nao do jeito que eu quero sacou? A que eu fiz ficou parecido com a desse segundo link que tu postou, nao é como eu queria mas resolve o problema.

rodriguesabner

Entendi, esses negocios de banco de dados é bem chatinho mesmo, é cada gambiarra que a gente faz pra funcionar como queremos kkkkkk

L

hahahahaha pois é, nem fale rsrs

Criado 19 de setembro de 2019
Ultima resposta 24 de set. de 2019
Respostas 7
Participantes 2