Products

Partycjonowanie tabel (pg_partman)

Tabele dzielone po czasie lub ID, partycje tworzone z wyprzedzeniem, retencja przez pg_cron.

This page is available in Polish only for now. The commands, code and API calls below are the same in every language — an English translation is on its way. Open the Polish page

Baza danych → Partycjonowanie tworzy tabele PARTITION BY RANGE zarządzane przez pg_partman 5:

  • Nowa tabela — podajesz kolumny, kolumnę sterującą (np. created_at lub id), interwał (dzień, tydzień, miesiąc… albo co N identyfikatorów) i liczbę partycji tworzonych z wyprzedzeniem (premake).
  • Konwersja — istniejąca tabela jest przemianowana na <nazwa>_legacy, a w jej miejscu powstaje kopia partycjonowana z danymi. Oryginał zostaje do weryfikacji. Odrzucamy tabele, na które wskazują klucze obce, i większe niż 2 mln wierszy.
  • Retencja — np. 90 days: starsze partycje są usuwane (DROP, natychmiastowe zwolnienie miejsca zamiast DELETE).

Utrzymanie (partman.run_maintenance_proc()) działa co godzinę jako zadanie pg_cron hostbase-partman-maintenance. Klucz główny tabeli partycjonowanej musi zawierać kolumnę sterującą.

create table public.events (
  id bigint generated always as identity,
  created_at timestamptz not null default now(),
  payload jsonb,
  primary key (id, created_at)
) partition by range (created_at);

select partman.create_parent(p_parent_table := 'public.events', p_control := 'created_at', p_interval := '1 month', p_premake := 4);