Produkty
Partycjonowanie tabel (pg_partman)
Tabele dzielone po czasie lub ID, partycje tworzone z wyprzedzeniem, retencja przez pg_cron.
Baza danych → Partycjonowanie tworzy tabele PARTITION BY RANGE zarządzane przez pg_partman 5:
- Nowa tabela — podajesz kolumny, kolumnę sterującą (np.
created_atlubid), 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 zamiastDELETE).
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);