PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

postgresql изтриване на таблици с дялове

За всеки, който попадне тук и търси как да изтрие дяловете на таблицата в PostgreSQL, ето съвременния отговор.

Решението е да не използвате оператор DELETE, защото това ще изтрие данните, без да изтрие съответните дялове на таблицата, които съдържат данните. OP попита за управление на таблици на дялове, а не за изтриване на записи, така че всяко решение, използващо оператори DELETE, добавя ненужни разходи за базата данни за изтриване на записи, оставя празни таблици на дялове на място и напълно игнорира едно от основните предимства на използването на разделяне; ОТПУСКАНЕ на таблицата, когато вече не е полезна.

В този случай решението трябва да бъде ОТПУСКАНЕ на вече ненужната таблица на дяловете. Написах решение за разрешаване на този проблем в моята производствена среда, отговорът е тук .

За да разрешите проблема с OP, функцията, която написах, може да се използва с две леки ревизии за промяна на fullTablename променлива и формата на датата. Редът на променливата fullTablename трябва да бъде променен от

fullTablename := base_table_name || '_' || to_char(startTime, dateFormat);

във формат ГГГГ-ММ-ДД_log като този

fullTablename := to_char(startTime, dateFormat) || '_' || base_table_name;

Тогава форматът на датата трябва да бъде леко модифициран от

WHEN partition_plan='day'   THEN 'YYYYDDD'

към посочената конвенция за именуване на таблици

WHEN partition_plan='day'   THEN 'YYYY-MM-DD'

Тогава SQL заявката, която извиква функцията за извършване на почистването, може да бъде извикана от скрипт за ежедневна поддръжка като този:

SELECT public.drop_partitions(current_date-180, 'public', 'log', 5, 'day');

Което ще ОТПУСТИ таблиците ГГГГ-ММ-ДД_log, които са 5 дни по-стари от 180 преди дни. За първоначално изпълнение за изтриване на десетки или стотици стари дялове на таблици, 5 може да се настрои на много по-висока стойност, която постига желания ефект.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Автоматично увеличаване на частичен първичен ключ с Entity Framework Core

  2. Postgres jsonb заявка за вложен обект

  3. Премахване на псевдоним в генерирани от Slick заявки

  4. Как използвате променливи в прост PostgreSQL скрипт?

  5. Трябва ли хибернацията да използва уникални последователности за всяка таблица?