Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

erro de sintaxe quando cria uma trigger

olá para todos! Estou recebendo a seguinte mensagem de erro:

Query execution failed
Reason:
SQL Error [42601]: ERROR: syntax error at or near "function" 
Position: 73

referente a este trecho de código:

create trigger usuario_log after insert on usuario
for each row execute function criar_usuario_log();

segue tabelas e trigger procedure para confirmação:

create table usuario (
id integer primary key not null,
nome text not null,
idade integer not null
);

create table usuario_log (
id integer primary key not null,
usuario_id integer not null,
mensagem text not null,
data_criacao Date not null
);

create or replace function criar_usuario_log() returns trigger as $$
    begin
        select * from usuario where id = new.id;
        if not found then
            insert into usuario_log 
            values (new.id, new.id, 'usuario ' || new.nome || ' foi inserido com a idade ' || new.idade, date.now());
            return new;
        else
            return null;
        end if;
    end;
$$ language plpgsql
3 respostas

acabei de testar substituindo o function por procedure e funcionou!

Mas porque o function não funciona?

solução!

Oii Leônio, tudo bom?

A sintaxe EXECUTE FUNCTION para instruções CREATE TRIGGER foi introduzida no PostgreSQL 11.

No PostgreSQL 10 você precisa usar a sintaxe EXECUTE PROCEDURE.

Esta sintaxe tornou-se obsoleta no PostgreSQL 11 com a introdução de procedimentos, que são distintos das funções e não podem ser usados para implementar um gatilho.

Espero ter ajudado. Qualquer coisa estou por aqui, tá bom? :)

Ajudou sim! Muito obrigado!