PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

postgresql usuń tabele partycji

Dla każdego, kto kończy się tutaj, szukając sposobu usunięcia partycji tabeli w PostgreSQL, oto nowoczesna odpowiedź.

Rozwiązaniem nie jest użycie instrukcji DELETE, ponieważ spowoduje to usunięcie danych bez porzucania odpowiednich partycji tabeli, w których były przechowywane dane. OP zapytał o zarządzanie tabelami partycji, a nie usuwanie rekordów, więc każde rozwiązanie korzystające z instrukcji DELETE zwiększa niepotrzebne obciążenie bazy danych związane z usuwaniem rekordów, pozostawia puste tabele partycji i całkowicie ignoruje jedną z głównych korzyści stosowania partycjonowania; UPUSZCZANIE stołu, gdy nie jest już przydatny.

W takim przypadku rozwiązaniem musi być PORZUCENIE niepotrzebnej już tablicy partycji. Napisałem rozwiązanie tego problemu w moim środowisku produkcyjnym, odpowiedź to tutaj .

Aby rozwiązać problem OP, napisana przeze mnie funkcja może zostać użyta z dwoma niewielkimi poprawkami do zmodyfikowania pełnej nazwy tabeli zmienna i format daty. Wiersz zmiennej fullTablename musi zostać zmieniony z

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

do formatu RRRR-MM-DD_log w ten sposób

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

Następnie format daty należy nieznacznie zmodyfikować z

WHEN partition_plan='day'   THEN 'YYYYDDD'

zgodnie z podaną konwencją nazewnictwa tabel

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

Następnie zapytanie SQL, które wywołuje funkcję w celu wykonania czyszczenia, może zostać wywołane ze skryptu codziennej konserwacji w następujący sposób:

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

Która spowoduje USUNIĘCIE tabel RRRR-MM-DD_log, które są 5 dni starsze niż 180 kilka dni temu. Dla pierwszego uruchomienia w celu usunięcia dziesiątek lub setek starych partycji tabeli, 5 można ustawić na znacznie wyższą wartość, aby osiągnąć pożądany efekt.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy funkcja LAG okna może odwoływać się do kolumny, której wartość jest obliczana?

  2. Znajdź identyfikator rodzica, gdy wszystkie dzieci mają tę samą wartość

  3. Funkcja w PostgreSQL do wstawiania z jednej tabeli do drugiej?

  4. Nie wybrano schematu do utworzenia w ... błąd

  5. SQLAlchemy — stan licznika to prawda