Назад | Перейти на главную страницу

Разделение таблицы PostgreSQL на основе атрибута FK

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

Вот мои таблицы:

Article (Table1)
 id
 submit_date
 ...

Concept (Table2)
 id
 article_id (FK)
 ...

Итак, я хочу разделить Концепция таблица на основе submit_date атрибут из таблицы товаров (например, разбить по месяцам). Возможно ли это с PostgreSQL?

Конечно. Вы можете разделить на любые поля или сложные запросы, которые хотите - INSERT обрабатывается триггером, а SELECT по наследованию таблиц.

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

  1. СДЕЛАТЬ РЕЗЕРВНУЮ КОПИЮ
    Если вы продолжите работу без резервного копирования и потеряете свои данные, над вами будут издеваться.
  2. Создайте подтаблицы для каждого раздела.
  3. Сделайте вашу базу данных неподвижной (отключите всех клиентов или заблокируйте как минимум основную таблицу).
  4. INSERT данные в каждый раздел
    (INSERT INTO Concept_0001 SELECT * FROM Concept WHERE …)
  5. DROP исходную таблицу и воссоздайте ее, чтобы унаследовать от разделителей.

Ты читал документация Postgres по разделам таблиц и наследование таблицы? Это в значительной степени является предварительным условием для попытки любого вида разделения таблицы в Postgres ...