> Looks like the assert in ReorderBufferForget failed because
> ninvalidations is not 0.

I think it can be fixed by this:

```
@@ -282,18 +286,24 @@ xact_decode(LogicalDecodingContext *ctx, XLogRecordBuffer 
*buf)
                        {
                                TransactionId xid;
                                xl_xact_invals *invals;
+                               bool has_snapshot;
 
                                xid = XLogRecGetXid(r);
                                invals = (xl_xact_invals *) XLogRecGetData(r);
+                               has_snapshot =
+                                       SnapBuildCurrentState(builder) >= 
SNAPBUILD_FULL_SNAPSHOT;
 
                                /*
                                 * Execute the invalidations for xid-less 
transactions,
                                 * otherwise, accumulate them so that they can 
be processed at
                                 * the commit time.
+                                *
+                                * Note that we only need to do this when we 
are not fast-forwarding
+                                * and there is a snapshot.
                                 */
                                if (TransactionIdIsValid(xid))
                                {
-                                       if (!ctx->fast_forward)
+                                       if (!ctx->fast_forward && has_snapshot)
                                                
ReorderBufferAddInvalidations(reorder, xid,
                                                                                
                          buf->origptr,
                                                                                
                          invals->nmsgs,
@@ -301,7 +311,7 @@ xact_decode(LogicalDecodingContext *ctx, XLogRecordBuffer 
*buf)
                                        
ReorderBufferXidSetCatalogChanges(ctx->reorder, xid,
                                                                                
                          buf->origptr);
                                }
-                               else if (!ctx->fast_forward)
+                               else if (!ctx->fast_forward && has_snapshot)
                                        
ReorderBufferImmediateInvalidation(ctx->reorder,
                                                                                
                           invals->nmsgs,
                                                                                
                           invals->msgs);
```

--
Regards,
ChangAo Chen

Reply via email to