Melhor com o
USING
cláusula de EXECUTE
:CREATE FUNCTION foo ()
RETURNS trigger AS
$func$
BEGIN
IF TG_OP = 'INSERT' THEN
EXECUTE format('INSERT INTO %s SELECT $1.*'
, 'samples_' || left(NEW.md5, 2);
USING NEW;
END IF;
RETURN NULL;
END
$func$ LANGUAGE plpgsql;
E
EXECUTE
não requer parênteses.E você está ciente de que os identificadores são dobrados em letras minúsculas, a menos que sejam citados quando necessário (
%I
em vez de %s
em format()
). Mais detalhes:
- INSERT com nome da tabela dinâmica na função de gatilho
- Como usar dinamicamente o TG_TABLE_NAME no PostgreSQL 8.2?