diff --git a/.changeset/beige-frogs-film.md b/.changeset/beige-frogs-film.md new file mode 100644 index 000000000..7772c7e91 --- /dev/null +++ b/.changeset/beige-frogs-film.md @@ -0,0 +1,5 @@ +--- +'@electric-sql/pglite-sync': patch +--- + +Correctly persist the offset during initial sync diff --git a/packages/pglite-sync/src/index.ts b/packages/pglite-sync/src/index.ts index 0531fe5bb..8a463f7d5 100644 --- a/packages/pglite-sync/src/index.ts +++ b/packages/pglite-sync/src/index.ts @@ -253,6 +253,7 @@ async function createPlugin( shapeKey: options.shapeKey, shapeId: shapeHandle, lastOffset: getMessageOffset( + stream, messageAggregator[messageAggregator.length - 1], ), }) @@ -673,10 +674,18 @@ function subscriptionMetadataTableName(metadatSchema: string) { const subscriptionTableName = `shape_subscriptions_metadata` -function getMessageOffset(message: LegacyChangeMessage): Offset { +function getMessageOffset( + stream: ShapeStream, + message: LegacyChangeMessage, +): Offset { if (message.offset) { return message.offset - } else { + } else if ( + message.headers.lsn !== undefined && + message.headers.op_position !== undefined + ) { return `${message.headers.lsn}_${message.headers.op_position}` as Offset + } else { + return stream.lastOffset } }