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

Comment passer NEW.* à EXECUTE dans la fonction de déclenchement

Meilleur avec le USING clause 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;

Et EXECUTE ne nécessite pas de parenthèses.
Et vous savez que les identifiants sont pliés en minuscules sauf s'ils sont cités si nécessaire (%I au lieu de %s au format() ).

Plus de détails :