Het beste met de USING clausule van 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;
En EXECUTE vereist geen haakjes.
En u weet dat identifiers naar kleine letters worden gevouwen, tenzij ze waar nodig worden geciteerd (%I in plaats van %s in format() ).
Meer details:
- INSERT met dynamische tabelnaam in triggerfunctie
- Hoe dynamisch gebruik te maken van TG_TABLE_NAME in PostgreSQL 8.2?