Ceci est l'un des BEFORE
déclencheurs qui insère dans le droit table partition:AVANT Trigger + retour retourne NULL
CREATE OR REPLACE FUNCTION public.insert_install_session()
RETURNS trigger
LANGUAGE plpgsql
AS
$body$
BEGIN
IF (NEW.created >= '2015-10-01 00:00:00' AND NEW.created < '2015-10-02 00:00:00') THEN
INSERT INTO install_session_2015_10_01 VALUES (NEW.*);
ELSIF (NEW.created >= '2015-10-02 00:00:00' AND NEW.created < '2015-10-03 00:00:00') THEN
INSERT INTO install_session_2015_10_02 VALUES (NEW.*);
ELSIF (NEW.created >= '2015-09-30 00:00:00' AND NEW.created < '2015-10-01 00:00:00') THEN
INSERT INTO install_session_2015_09_30 VALUES (NEW.*);
ELSE
RETURN NEW;
END IF;
RETURN NULL;
END;
$body$
CREATE TRIGGER trigger_insert_install_session
BEFORE INSERT ON install_session
FOR EACH ROW EXECUTE PROCEDURE insert_install_session
et j'ai une requête qui utilise RETURNING
:
INSERT INTO "install_session"
(<columns here>)
VALUES
(<values here>)
RETURNING "install_session"."id";
Comment puis-je faire le travail RETURNING
? Il semble qu'il retourne toujours NULL.
Est-ce à cause du RETURN NULL
à la fin de la fonction? Je ne peux pas retourner NEW
parce que la ligne serait insérée une deuxième fois, non? Voici le official docs.
Les règles fonctionneraient-elles avec des PARTITIONS? Malheureusement, je ne peux pas modifier le code qui utilise RETURNING, donc currval() n'est pas une option pour moi. Merci de l'avoir signalé. – kev