Votre fonction pourrait ressembler à ceci dans Postgres 9.0 ou version ultérieure :
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;
À propos de RETURN NULL
:
- Ignorer le résultat dans BEFORE TRIGGER de PostgreSQL ?
Je conseillerais de ne pas utiliser d'identificateurs à casse mixte. Avec format( .. %I ..)
ou quote_ident()
, vous obtiendrez une table nommée "dummyTest"
, que vous devrez mettre entre guillemets pour le reste de son existence. Connexe :
- Les noms de colonne PostgreSQL sont-ils sensibles à la casse ?
Utilisez plutôt des minuscules :
quote_ident('dummytest')
Il n'y a vraiment aucun intérêt à utiliser du SQL dynamique avec EXECUTE
tant que vous avez un nom de table statique. Mais ce n'est probablement que l'exemple simplifié ?