Это один из BEFORE
триггеров, которые вставляют в правый table partition:ПЕРЕД Trigger + RETURNING возвращает 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
и у меня есть запрос, который использует RETURNING
:
INSERT INTO "install_session"
(<columns here>)
VALUES
(<values here>)
RETURNING "install_session"."id";
Как я могу сделать RETURNING
работы? Кажется, он всегда возвращает NULL.
Это из-за RETURN NULL
в конце функции? Я не могу вернуть NEW
, потому что строка будет вставлена во второй раз, нет? Вот official docs.
Могут ли ПРАВИЛА работать с PARTITIONS? К сожалению, я не могу изменить код, который использует RETURNING, поэтому currval() для меня не вариант. Спасибо, что указали на это. – kev