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

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

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

Article (Table1)
 id
 submit_date
 ...

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

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

1 ответ

Решение

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

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

  1. Сделать резервное копирование
    Если вы продолжите без создания резервной копии и потеряете ваши данные, вы будете осмеяны.
  2. Создайте вложенные таблицы для каждого раздела.
  3. Сделайте вашу базу данных спокойной (либо отключите все клиенты, либо как минимум заблокируйте основную таблицу).
  4. INSERT данные в каждый раздел
    (INSERT INTO Concept_0001 SELECT * FROM Concept WHERE …)
  5. DROP исходную таблицу и воссоздайте ее, чтобы наследовать от разделов.

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

Другие вопросы по тегам