Sua função pode ficar assim no Postgres 9.0 ou posterior:
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;
Sobre
RETURN NULL
:- Ignorar o resultado em BEFORE TRIGGER do PostgreSQL?
Eu aconselharia não usar identificadores de maiúsculas e minúsculas. Com
format( .. %I ..)
ou quote_ident()
, você obteria uma tabela chamada "dummyTest"
, que você terá que usar aspas duplas pelo resto de sua existência. Relacionado:- Os nomes das colunas do PostgreSQL diferenciam maiúsculas de minúsculas?
Em vez disso, use letras minúsculas:
quote_ident('dummytest')
Não faz sentido usar SQL dinâmico com
EXECUTE
contanto que você tenha um nome de tabela estático. Mas isso é provavelmente apenas o exemplo simplificado?