PostgreSQL позволяет реализовать механизм партиционирования на очень нативном уровне — но при этом запрос к родительской таблице имеет отношение и ко всем дочерним таблицам. Таким образом стает проблематично удалить или получить данные только из родительской таблицы. В этой статье я расскажу. Как очень просто решить поставленную проблему.
Для начала напомню, что партиционирование позволяет разбивать огромный массив данных, необходимый для хранения — на множество более мелких таблиц по определенному признаку.
Например, данные показаний о погоде можно разбивать на таблицы в соответствии с месяцем и годом. Таким образом, данные за май будут храниться в таблице, например — weather_data_y2017-m5.
Данный подход позволяет в множество раз ускорить запрос — т. к. данные буду искаться не среди всех записей, а в относительно не большой таблице.
Итак, вернемся к нашей задаче. Указать в запросе, что мы желаем обратиться только к родительской таблице можно при помощи ключевого слова ONLY:
DELETE FROM ONLY weather_data;
Все очень просто. Подход работает во всех необходимых запросах — SELECT, UPDATE, DELETE.