Merge pull request #387 from matrix-org/erikj/fix_port_script

Fix database port script to work with new event_search table
This commit is contained in:
Erik Johnston 2015-11-19 13:04:28 +00:00
commit e5d91b8e57
1 changed files with 44 additions and 11 deletions

View File

@ -68,6 +68,7 @@ APPEND_ONLY_TABLES = [
"state_groups_state", "state_groups_state",
"event_to_state_groups", "event_to_state_groups",
"rejections", "rejections",
"event_search",
] ]
@ -229,19 +230,51 @@ class Porter(object):
if rows: if rows:
next_chunk = rows[-1][0] + 1 next_chunk = rows[-1][0] + 1
self._convert_rows(table, headers, rows) if table == "event_search":
# We have to treat event_search differently since it has a
# different structure in the two different databases.
def insert(txn):
sql = (
"INSERT INTO event_search (event_id, room_id, key, sender, vector)"
" VALUES (?,?,?,?,to_tsvector('english', ?))"
)
def insert(txn): rows_dict = [
self.postgres_store.insert_many_txn( dict(zip(headers, row))
txn, table, headers[1:], rows for row in rows
) ]
self.postgres_store._simple_update_one_txn( txn.executemany(sql, [
txn, (
table="port_from_sqlite3", row["event_id"],
keyvalues={"table_name": table}, row["room_id"],
updatevalues={"rowid": next_chunk}, row["key"],
) row["sender"],
row["value"],
)
for row in rows_dict
])
self.postgres_store._simple_update_one_txn(
txn,
table="port_from_sqlite3",
keyvalues={"table_name": table},
updatevalues={"rowid": next_chunk},
)
else:
self._convert_rows(table, headers, rows)
def insert(txn):
self.postgres_store.insert_many_txn(
txn, table, headers[1:], rows
)
self.postgres_store._simple_update_one_txn(
txn,
table="port_from_sqlite3",
keyvalues={"table_name": table},
updatevalues={"rowid": next_chunk},
)
yield self.postgres_store.execute(insert) yield self.postgres_store.execute(insert)