PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Fonction de déclenchement PostgreSQL 9.3 à insérer dans une table avec un nom paramétré

CREATE FUNCTION log_roll_test()
  RETURNS trigger AS
$func$
BEGIN
   EXECUTE format('INSERT INTO %I SELECT ($1).*'
                , to_char(NEW.updt_ts, '"log"WW'))   -- child table name
   USING NEW;
   RETURN NULL;
END
$func$ LANGUAGE plpgsql;

Vous ne pouvez pas référencer NEW à l'intérieur de la chaîne de requête. NEW est visible dans le corps de la fonction, mais pas dans EXECUTE environnement. La meilleure solution est de passer les valeurs dans le USING clause.

J'ai également remplacé l'équivalent to_char(NEW.updt_ts, '"log"WW') pour le nom de la table. to_char() est plus rapide et plus simple ici.