Meglio con USING
clausola di 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
non richiede parentesi.
E sei consapevole che gli identificatori sono piegati in minuscolo a meno che non siano citati ove necessario (%I
invece di %s
in format()
).
Maggiori dettagli:
- INSERIRE con nome della tabella dinamica nella funzione trigger
- Come utilizzare dinamicamente TG_TABLE_NAME in PostgreSQL 8.2?