Din funktion kan se ut så här i Postgres 9.0 eller senare:
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;
Om RETURN NULL
:
- Att ignorera resultatet i BEFORE TRIGGER av PostgreSQL?
Jag skulle råda dig att inte använda identifierare med blandade skiftlägen. Med format( .. %I ..)
eller quote_ident()
, skulle du få en tabell med namnet "dummyTest"
, som du måste dubbla citat under resten av dess existens. Relaterat:
- Är PostgreSQL-kolumnnamn skiftlägeskänsliga?
Använd små bokstäver istället:
quote_ident('dummytest')
Det är verkligen ingen mening att använda dynamisk SQL med EXECUTE
så länge du har ett statiskt tabellnamn. Men det är väl bara det förenklade exemplet?