Помогите разобраться с секционированием таблицы

Изображение Gweningwarr

Доброго времени суток, я новичёк в работе с бд Postgres.
В документации нашёл описание секционирования таблицы, попробовал сделать подобное с таблицей новостей вот код тригера:

CREATE OR REPLACE FUNCTION public.news_insert_trigger()
RETURNS TRIGGER AS $$
BEGIN
/* для 2013 года */
IF (NEW.publicdate >= TIMESTAMP '2013-01-01 00:00:00' AND NEW.publicdate < TIMESTAMP '2013-02-01 00:00:00') THEN INSERT INTO public.news_01012011 VALUES (NEW.*);
...
ELSIF (NEW.publicdate >= TIMESTAMP '2010-12-01 00:00:00' AND NEW.publicdate < TIMESTAMP '2011-01-01 00:00:00') THEN INSERT INTO public.news_01122010 VALUES (NEW.*);
/* всё что раньше 01.01.2010 года */
ELSIF (NEW.publicdate < TIMESTAMP '2010-01-01 00:00:00') THEN INSERT INTO public.news_before2010 VALUES (NEW.*);

ELSE
RAISE EXCEPTION 'Date % is out of range. Fix public.news_insert_trigger', NEW.publicdate;
END IF;
RETURN NULL;
END;
$$
LANGUAGE plpgsql;

/* тригер переназначения */

CREATE TRIGGER news_before_insert
BEFORE INSERT ON public.news
FOR EACH ROW EXECUTE PROCEDURE public.news_insert_trigger();

Проблема в том, что после добавления записи она вносится и в таблицу мастер и а соответствующую дочернюю таблицу. В дакументации написано что таблица мастер должна быть пустой, можете подсказать где искать ошибку?По идее триггер возвращает же ноль и я не пойму почему тогда записывается запись

И еще вопрос, возможно ли как то сохранить id записи в дочерних таблицах, у меня уже есть таблица новостей с id записями и мне надо её разбить на секции но к id записей привязано много функционала, возможно ли это или я вообще не в том месте копаю и секционирование не для такого варианта?

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Читали?

Да читал, может что не так

Изображение Gweningwarr

Да читал, может что не так понял триггер делал как раз по примеру из этой документации и ещё вот этой статьёй пользовался http://habrahabr.ru/post/74984/ так же пробовал полностью повторить код из статьи с хабры, но данные все равно добавлялись в обе таблицы (мастер и дочернюю)

А как данные-то читаете из

А как данные-то читаете из таблиц? ONLY используете?

Нет ONLY не использовал,

Изображение Gweningwarr

Нет ONLY не использовал, вообще делал так, была таблица news, я скопировал её назвав oldnews и перенёс туда данные
INSER INTO oldnews SELECT * FROM news;
После стёр данные из таблицы news и создал по ней партиции, индексы по дате, тригер и функцию к тригеру. Сделал обратныю операцию по переносу INSER INTO news SELECT * FROM oldnews;
Данные записались в обе таблицы, я опять отчистел её и попробовал просто добавить запись вручную для теста, тоже аналогично получились данные в соответствующей партиции и в основной таблице

вот SQL для создания партиций полностью SQL

Так используйте ONLY и

Так используйте ONLY и посмотрите что в таблицах.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023