| From: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
|---|---|
| To: | Antonin Houska <ah(at)cybertec(dot)at> |
| Cc: | Srinath Reddy Sadipiralla <srinath2133(at)gmail(dot)com>, Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>, Mihail Nikalayeu <mihailnikalayeu(at)gmail(dot)com>, Matthias van de Meent <boekewurm+postgres(at)gmail(dot)com>, Pg Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>, Robert Treat <rob(at)xzilla(dot)net> |
| Subject: | Re: Adding REPACK [concurrently] |
| Date: | 2026-04-03 14:59:09 |
| Message-ID: | 202604031448.3nakw63kxkmr@alvherre.pgsql |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
On 2026-Apr-03, Antonin Houska wrote:
> This is an alternative implementation of 0006, allowing one backend running
> REPACK (CONCURRENTLY) in a database, instead of one backend in a cluster.
Thanks! so I'm removing the previous one and taking this one. Here's a
v50:
- In testing, I noticed that we could sometimes request a Flush for a
WAL position that hasn't been written yet. This is due to my
replacing the original code that wrote a dummy xlog record that we
could flush, with a call to XLogGetInsertRecPtr(). So we'd get an
error like
LOG: request to flush past end of generated WAL; request 0/15CF0018, current position 0/15CF000
Antonin promptly noticed that this is because XLogGetInsertRecPtr()
gets the LSN past the segment header, which is 18 bytes wrong. So the
fix here is to use XLogGetInsertEndRecPtr() instead.
- My testing also uncovered a problem with exclusion constraints; tables
with them would fail to repack like
ERROR: exclusion constraint record missing for rel temporal_fk_mltrng2mltrng_pk_repacknew
Antonin sent a patch to create copies of the constraints on the
transient index, which seems like it fixes the problem. Those
constraints are obviously discarded together with the transient index.
- I polished the patch to reserve replication slots for REPACK. Given
the new implementation of 0006 that was submitted implies that we can
now run multiple repacks concurrently, I changed the default of 1 to 5.
--
Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/
"Here's a general engineering tip: if the non-fun part is too complex for you
to figure out, that might indicate the fun part is too ambitious." (John Naylor)
https://postgr.es/m/CAFBsxsG4OWHBbSDM%3DsSeXrQGOtkPiOEOuME4yD7Ce41NtaAD9g%40mail.gmail.com
| Attachment | Content-Type | Size |
|---|---|---|
| v50-0001-Make-index_concurrently_create_copy-more-general.patch | text/x-diff | 6.4 KB |
| v50-0002-Rename-cluster.c-h-repack.c-h.patch | text/x-diff | 7.8 KB |
| v50-0003-Add-CONCURRENTLY-option-to-REPACK-command.patch | text/x-diff | 171.3 KB |
| v50-0004-Fix-a-few-problems-in-index-build-progress-repor.patch | text/x-diff | 7.4 KB |
| v50-0005-support-repacking-tables-with-exclusion-constrai.patch | text/x-diff | 4.4 KB |
| v50-0006-Error-out-any-process-that-would-block-at-REPACK.patch | text/x-diff | 12.8 KB |
| v50-0007-Introduce-an-option-to-make-logical-replication-.patch | text/x-diff | 16.2 KB |
| v50-0008-Reserve-replication-slots-specifically-for-REPAC.patch | text/x-diff | 20.5 KB |
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Sami Imseih | 2026-04-03 14:59:19 | Re: pg_waldump: support decoding of WAL inside tarfile |
| Previous Message | Bertrand Drouvot | 2026-04-03 14:53:15 | meson: Adjust test timeout for Valgrind builds |