Таблица разделов PostgreSQL на основе атрибута FK
Я хочу разделить свою огромную таблицу, чтобы решить проблему с производительностью, но атрибут, по которому я хочу разделить свою таблицу, находится в другой таблице, связанной с FK.
Вот мои таблицы:
Article (Table1)
id
submit_date
...
Concept (Table2)
id
article_id (FK)
...
Итак, я хочу разделить таблицу Concept на основе атрибута submit_date из таблицы article (например, разделить его по месяцам). Возможно ли это с PostgreSQL?
1 ответ
Конечно. Вы можете разбить на любые поля или сложные запросы, которые вы хотите - INSERT
обрабатывается триггером, а SELECT
по наследству таблицы.
В вашем случае триггеру для таблицы понятий нужно будет выполнить соответствующий запрос на submit_date, чтобы определить, в какой раздел вставить. Если у вас уже есть данные в таблице концепций, вам потребуется немного поработать, чтобы разбить существующие данные:
- Сделать резервное копирование
Если вы продолжите без создания резервной копии и потеряете ваши данные, вы будете осмеяны. - Создайте вложенные таблицы для каждого раздела.
- Сделайте вашу базу данных спокойной (либо отключите все клиенты, либо как минимум заблокируйте основную таблицу).
INSERT
данные в каждый раздел
(INSERT INTO Concept_0001 SELECT * FROM Concept WHERE …
)DROP
исходную таблицу и воссоздайте ее, чтобы наследовать от разделов.
Вы читали документацию Postgres по таблицам секционирования и наследованию таблиц? Это в значительной степени является обязательным условием для попыток любого разделения таблиц в Postgres...