Re: Adding REPACK [concurrently]

Antonin Houska <ah@cybertec.at>

From: Antonin Houska <ah@cybertec.at>
To: Mihail Nikalayeu <mihailnikalayeu@gmail.com>
Cc: Alvaro Herrera <alvherre@alvh.no-ip.org>, Pg Hackers <pgsql-hackers@lists.postgresql.org>, Robert Treat <rob@xzilla.net>
Date: 2026-01-19T16:31:19Z
Lists: pgsql-hackers
Antonin Houska <ah@cybertec.at> wrote:

> Mihail Nikalayeu <mihailnikalayeu@gmail.com> wrote:
> 
> >Antonin Houska <ah@cybertec.at>:
> >> 
> >> As the test runs pgbench with --client=30 and the default value of
> >> max_worker_processes is 8, I'm not sure this is a leak. I've increased this
> >> parameter I couldn't see the error anymore.
> > 
> > Hm, as far as I remember only single repack may be executed in test (because
> > of locking on test itself and also REPACK).
> 
> The only problem is that the logical decoding system needs to wait during the
> setup for all the running transactions to finish. So if REPACK (CONCURRENTLY)
> is already running, the next execution will not start until the first is done.
> 
> However, that does not restrict the REPACK decoding workers from starting.
> 
> >>  I agree that this is due to the missing MVCC safety feature. I commented that
> >>  check in the script for now.
> > 
> > I don't think so. In case of non-MVCC safety we should see 0 or correct sum. But script failed with 490588...
> > But should see 500500 (if I correctly calculated sum of numbers from 1 to 1000)...
> 
> I was referring to your statement "It may be 0 because non-MVCC
> safe". Regarding the non-zero values, I think I finally understand the issue
> and even could reproduce some weird behavior using debugger. Since it also
> affects logical replication, I'll provide more details (and hopefully propose
> a patch) in a separate thread early next week.

This is the report:

https://www.postgresql.org/message-id/85833.1768840165%40localhost

-- 
Antonin Houska
Web: https://www.cybertec-postgresql.com



Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Allow old WAL recycling during REPACK CONCURRENTLY

  2. Advance restart_lsn more eagerly in LogicalConfirmReceivedLocation

  3. Remove unnecessary signal handler change

  4. Improve REPACK (CONCURRENTLY) error messages some more

  5. Revert "Allow logical replication snapshots to be database-specific"

  6. Move REPACK (CONCURRENTLY) test out of stock regression tests

  7. REPACK: do not require REPLICATION or LOGIN

  8. Add missing initialization

  9. Simplify declaration of memcpy target

  10. Reserve replication slots specifically for REPACK

  11. doc: Add an example of REPACK (CONCURRENTLY)

  12. Allow logical replication snapshots to be database-specific

  13. Avoid different-size pointer-to-integer cast

  14. Fix valgrind failure

  15. Add CONCURRENTLY option to REPACK

  16. Rename cluster.c to repack.c (and corresponding .h)

  17. Allow index_create to suppress index_build progress reporting

  18. Make index_concurrently_create_copy more general

  19. Document the 'command' column of pg_stat_progress_repack

  20. Introduce the REPACK command

  21. Toggle logical decoding dynamically based on logical slot presence.

  22. Split vacuumdb to create vacuuming.c/h

  23. Remove ReorderBufferTupleBuf structure.

  24. Revert changes to CONCURRENTLY that "sped up" Xmin advance

  25. VACUUM: ignore indexing operations with CONCURRENTLY