Najlepiej z USING
klauzula 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;
I EXECUTE
nie wymaga nawiasów.
I wiesz, że identyfikatory są składane do małych liter, chyba że są cytowane w razie potrzeby (%I
zamiast %s
w format()
).
Więcej szczegółów:
- WSTAW z dynamiczna nazwa tabeli w funkcji wyzwalacza
- Jak dynamicznie używać TG_TABLE_NAME w PostgreSQL 8.2?