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 :
- INSÉRER avec nom de table dynamique dans la fonction de déclenchement
- Comment utiliser dynamiquement TG_TABLE_NAME dans PostgreSQL 8.2 ?