PostgreSQL concurrent repack

PostgreSQL 병행 리팩

PostgreSQL 19 beta REPACK CONCURRENTLY reorganizes a table without blocking reads and writes.

···
html
<div class="demo"><div class="head"><b>REPACK CONCURRENTLY</b><span>PG 19 beta</span></div><div class="stage repack"><div class="blockrow"><span>old</span><i></i><i></i><i></i><i></i></div><div class="blockrow compact"><span>new</span><i></i><i></i><i></i><i></i></div><div class="traffic"><b>READ</b><b>WRITE</b></div></div><div class="foot"><span id="repackstatus">copy block 1 / 4</span><span>traffic continues</span></div></div>
css
*{box-sizing:border-box}.demo{width:min(96vw,820px);height:min(94vh,350px);padding:clamp(8px,2vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);color:var(--fg);display:flex;flex-direction:column;gap:clamp(5px,1.5vmin,12px);font:600 clamp(12px,3.5vmin,15px)/1.25 var(--font-sans),sans-serif;overflow:hidden}.head,.foot,.row{display:flex;justify-content:space-between;align-items:center;gap:8px}.head b{color:var(--accent)}.head span,.foot,.muted{color:var(--muted)}.stage{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;gap:8px}.cell,.pill{border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:clamp(4px,1.2vmin,9px);text-align:center}.pill{border-radius:999px}.on{border-color:var(--accent)!important;background:color-mix(in srgb,var(--accent) 17%,var(--surface))!important;color:var(--fg)!important}.bad{border-color:#e16a5d!important;background:color-mix(in srgb,#e16a5d 18%,var(--surface))!important}.foot{font-size:clamp(12px,3vmin,14px)}.repack{flex-direction:column;justify-content:center;gap:6px}.blockrow{display:flex;align-items:center;gap:6px;width:90%}.blockrow span{width:32px;color:var(--muted)}.blockrow i{height:clamp(13px,4vmin,23px);flex:1;border:1px solid var(--line);border-radius:3px;background:var(--bg)}.blockrow.compact i{opacity:.2;transition:.25s}.blockrow.compact i.on{opacity:1;background:var(--accent)!important;border-color:var(--accent)}.traffic{display:flex;justify-content:space-around;width:90%;color:var(--accent);font-size:clamp(11px,3vmin,14px)}.traffic b{padding:2px 8px;border:1px solid var(--accent);border-radius:99px}
js
let n=0;function tick(){document.querySelectorAll('.compact i').forEach((e,i)=>e.classList.toggle('on',i<=n));document.getElementById('repackstatus').textContent=n===3?'compact copy ready':'copy block '+(n+1)+' / 4';n=(n+1)%4}tick();const t=setInterval(tick,650);document.querySelector('.demo').onclick=()=>{clearInterval(t);tick()}

PostgreSQL 19 beta adds REPACK to reclaim space and reorganize table contents. Its CONCURRENTLY option allows reads and writes to continue while the table is rebuilt.

The demo moves blocks into a compact layout while reads and writes keep flowing. Concurrent work still consumes disk space and I/O, so check capacity and load. It remains a beta feature until stable release.

When to use

Evaluate it when a table needs rebuilding without prolonged read and write blocking.

Open as page ↗