Vaše funkce může v Postgresu 9.0 nebo novějším vypadat takto:
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;
O RETURN NULL
:
- Ignorovat výsledek v BEFORE TRIGGER PostgreSQL?
Doporučuji nepoužívat smíšené identifikátory velkých a malých písmen. S format( .. %I ..)
nebo quote_ident()
, dostanete tabulku s názvem "dummyTest"
, který budete muset po zbytek jeho existence citovat dvakrát. Související:
- Rozlišují se v názvech sloupců PostgreSQL velká a malá písmena?
Místo toho použijte malá písmena:
quote_ident('dummytest')
Opravdu nemá smysl používat dynamické SQL s příkazem EXECUTE
pokud máte název statické tabulky. Ale to je pravděpodobně jen zjednodušený příklad?