У меня есть таблица с именем posts
с ~ 10-метровыми строками, и она снижает производительность моих запросов, поэтому я подумывал оптимизировать ее, используя разбиение на дочерние таблицы, где каждая дочерняя таблица будет содержать записи за год.
В настоящее время у меня есть следующая стратегия:
Создать дочернюю таблицу без ограничения INHERIT
с помощью
CREATE TABLE posts_2017 AS
(SELECT * from posts where inserted_at < '2018-01-01 00:00:00');
Создать потомство наследования с помощью
ALTER TABLE posts_2017 inherit posts;
Добавьте ограничение CHECK
к дочерней таблице впоследствии
Теперь это работает хорошо, но теперь, если я сделаю запрос SELECT * from posts
, я получу дубликаты результатов для постов 2017 года. Мой следующий шаг - удалить их из основной таблицы, используя другой запрос
DELETE FROM ONLY posts where inserted_at < '2018-01-01 00:00:00'
но я столкнулся с другим препятствием, когда другая таблица на самом деле имеет внешний ключ, ссылающийся на эти записи 2017 года.
Например, скажем, у меня есть таблица users_posts
только с столбцами user_id
и post_id
, и мой запрос на удаление не будет выполнен, если строка в этой таблице ссылается на сообщение 2017 года.
Какие у меня варианты в этом сценарии?