2 files changed, 5 insertions, 1 deletions
diff --git a/changelog.d/13226.bugfix b/changelog.d/13226.bugfix
new file mode 100644
index 0000000000..df96d41f37
--- /dev/null
+++ b/changelog.d/13226.bugfix
@@ -0,0 +1 @@
+Fix a long-standing bug where the `synapse_port_db` script could fail to copy rows with negative row ids.
diff --git a/synapse/_scripts/synapse_port_db.py b/synapse/_scripts/synapse_port_db.py
index 642fd41629..26834a437e 100755
--- a/synapse/_scripts/synapse_port_db.py
+++ b/synapse/_scripts/synapse_port_db.py
@@ -418,12 +418,15 @@ class Porter:
self.progress.update(table, table_size) # Mark table as done
return
+ # We sweep over rowids in two directions: one forwards (rowids 1, 2, 3, ...)
+ # and another backwards (rowids 0, -1, -2, ...).
forward_select = (
"SELECT rowid, * FROM %s WHERE rowid >= ? ORDER BY rowid LIMIT ?" % (table,)
)
backward_select = (
- "SELECT rowid, * FROM %s WHERE rowid <= ? ORDER BY rowid LIMIT ?" % (table,)
+ "SELECT rowid, * FROM %s WHERE rowid <= ? ORDER BY rowid DESC LIMIT ?"
+ % (table,)
)
do_forward = [True]
|