Най-добре с USING
клауза на 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;
И EXECUTE
не изисква скоби.
И вие знаете, че идентификаторите се сгъват в малки букви, освен ако не са цитирани, където е необходимо (%I
вместо %s
в format()
).
Повече подробности:
- INSERT с име на динамична таблица във функция за задействане
- Как да използвам динамично TG_TABLE_NAME в PostgreSQL 8.2?