Вашата функция може да изглежда така в Postgres 9.0 или по-нова версия:
CREATE OR REPLACE FUNCTION dummytest_insert_trigger()
RETURNS trigger AS
$func$
DECLARE
v_partition_name text := quote_ident('dummyTest'); -- assign at declaration
BEGIN
IF NEW.datetime IS NOT NULL THEN
EXECUTE
'INSERT INTO ' || v_partition_name || ' VALUES ($1,$2)'
USING NEW.id, NEW.datetime;
END IF;
RETURN NULL; -- You sure about this?
END
$func$ LANGUAGE plpgsql;
Относно RETURN NULL
:
- Да игнорирате резултата в BEFORE TRIGGER на PostgreSQL?
Бих посъветвал да не използвате смесени идентификатори. С format( .. %I ..)
или quote_ident()
, ще получите таблица с име "dummyTest"
, който ще трябва да цитирате двойно до края на съществуването му. Свързано:
- Именната на колоните в PostgreSQL зависят ли от малките букви?
Вместо това използвайте малки букви:
quote_ident('dummytest')
Наистина няма смисъл да използвате динамичен SQL с EXECUTE
стига да имате статично име на таблица. Но това вероятно е само опростения пример?