Am besten mit dem USING
Klausel von 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;
Und EXECUTE
erfordert keine Klammern.
Und Sie wissen, dass Bezeichner in Kleinbuchstaben umgewandelt werden, sofern sie nicht notfalls in Anführungszeichen gesetzt werden (%I
statt %s
im format()
).
Weitere Einzelheiten:
- INSERT with Dynamischer Tabellenname in Triggerfunktion
- Wie verwende ich TG_TABLE_NAME dynamisch in PostgreSQL 8.2?