DBAtlas · Veritabanı operasyon atlası

pg_partman ile partition oluşturma ve retention'ı otomatikleştir

PostgreSQLPartition

Komut

CREATE SCHEMA partman;
CREATE EXTENSION pg_partman SCHEMA partman;

CREATE TABLE public.olcum (
  id    bigint GENERATED ALWAYS AS IDENTITY,
  ts    timestamptz NOT NULL,
  deger numeric,
  PRIMARY KEY (id, ts)
) PARTITION BY RANGE (ts);

-- Günlük partition, 7 gün ilerisini önceden oluştur (pg_partman 5.x söz dizimi)
SELECT partman.create_parent(
  p_parent_table := 'public.olcum',
  p_control      := 'ts',
  p_interval     := '1 day',
  p_premake      := 7
);

-- 30 günden eski partition'ları sil
UPDATE partman.part_config
   SET retention = '30 days',
       retention_keep_table = false
 WHERE parent_table = 'public.olcum';

-- Bakım: periyodik çalıştır (pg_cron veya pg_partman_bgw ile zamanla)
CALL partman.run_maintenance_proc();

-- Default partition'a düşen satır var mı?
SELECT * FROM partman.check_default(p_exact_count := true);

Ne yapar?

pg_partman'a bir parent tabloyu kaydeder; gelecek partition'ları önceden oluşturur, retention süresini aşanları siler ve default partition'a düşen satırları raporlar.

Ne zaman kullanılır?

Günlük/aylık partition'ları elle veya özel script'le yönetmek yerine standart, izlenebilir bir otomasyon gerektiğinde (log, metrik, olay tabloları).

Dikkat

pg_partman 4.x ile 5.x arasında API değişti: 5.x'te p_type yalnızca 'range'/'list' alır (varsayılan 'range'), 4.x'teki p_type := 'native' geçersizdir; kurulu sürümü SELECT extversion FROM pg_extension WHERE extname = 'pg_partman'; ile kontrol et. create_parent varsayılan olarak bir default partition da oluşturur. retention_keep_table = false partition'ı kalıcı olarak DROP eder; arşiv gerekiyorsa true bırakıp retention_schema kullan. run_maintenance_proc() zamanlanmazsa yeni partition'lar oluşmaz ve veriler default'a düşer. pg_partman_bgw için shared_preload_libraries + restart gerekir.

DBAtlas'ta aç →

İlgili