Ihre Funktion könnte in Postgres 9.0 oder höher so aussehen:
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;
Über RETURN NULL
:
- Soll das Ergebnis in BEFORE TRIGGER von PostgreSQL ignoriert werden?
Ich würde raten, keine Groß-/Kleinschreibung zu verwenden. Mit format( .. %I ..)
oder quote_ident()
, erhalten Sie eine Tabelle mit dem Namen "dummyTest"
, die Sie für den Rest ihrer Existenz in doppelte Anführungszeichen setzen müssen. Verwandte:
- Beachten Sie bei PostgreSQL-Spaltennamen die Groß-/Kleinschreibung?
Verwenden Sie stattdessen Kleinbuchstaben:
quote_ident('dummytest')
Es macht wirklich keinen Sinn, dynamisches SQL mit EXECUTE
zu verwenden solange Sie einen statischen Tabellennamen haben. Aber das ist wohl nur das vereinfachte Beispiel?