PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como passar NEW.* para EXECUTE na função trigger


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: