Bedst med USING
klausul af 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;
Og EXECUTE
kræver ikke parenteser.
Og du er klar over, at identifikatorer foldes med små bogstaver, medmindre de citeres, hvor det er nødvendigt (%I
i stedet for %s
i format()
).
Flere detaljer:
- INDSÆT med dynamisk tabelnavn i triggerfunktion
- Hvordan bruger man TG_TABLE_NAME dynamisk i PostgreSQL 8.2?