Bäst med USING
sats av 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;
Och EXECUTE
kräver inte parentes.
Och du är medveten om att identifierare viks till små bokstäver om de inte citeras där det behövs (%I
istället för %s
i format()
).
Mer information:
- INSERT med dynamiskt tabellnamn i triggerfunktionen
- Hur använder man TG_TABLE_NAME dynamiskt i PostgreSQL 8.2?