how to capture an id dynamically and sequentially in postgresql?

Asked

Viewed 66 times

0

It refers to an audit table that I am creating, the objective in question is to record the fields of the table in question. But I can’t capture id ex:

create or replace function audit_unidade.log_unidade_escola()
returns trigger as
$body$ 
begin
-- Aqui temos um bloco IF que confirmará o tipo de operação.
IF (TG_OP = 'INSERT') THEN
    INSERT INTO audit_unidade.escola (after_updade) 
        VALUES (
        (select 'id: ' || id || ' || ' || 'Tipo: ' || tipo_unidade || ' || ' || 'Escola: ' || nome_escola || ' || ' || 'CEP: ' || cep || ' || ' 
            || 'Bairro: ' || bairro || ' || ' || 'Rua: ' || ' || ' || rua || 'Nº: ' || numero || ' || ' || 'Email: ' || email || ' || ' || 'telefone1: ' ||
             coalesce(telefone1,'') || ' || ' || 'Telefone2: ' || coalesce(telefone2,'') || ' || ' || 'id_diretor: ' || id_diretor || 'id_secretario: ' ||
             id_secretario || ' || '  || 'id_coordenador1: ' || id_coordenador1 || ' || ' || 'id_coordenador2: ' || coalesce(id_coordenador2, 0)  
        from unidade.escola where id = (select nextval('unidade.escola_id_seq'))));
RETURN NEW;
END IF;
RETURN NULL;
end; $body$
language 'plpgsql'

I tried the command (select nextval('unidade.escola_id_seq') above but does not work, the field of table "audit_unit.school" in the field "after_upty" although not giving error does not register anything relating to table "unit.school" because of the id that I can not capture would be grateful for this help.

1 answer

0

This is possibly happening because Trigger is running before the data is actually entered into the table. This way, this problem can be fixed by adding the condition AFTER INSERT in the creation of Rigger:

CREATE TRIGGER audit_unidade.log_unidade_escola_trigger AFTER INSERT OR UPDATE
    ON unidade.escola FOR EACH ROW EXECUTE PROCEDURE audit_unidade.log_unidade_escola();

Browser other questions tagged

You are not signed in. Login or sign up in order to post.