GIN reindex: Fix syntax errors, improve exception handling
This commit is contained in:
parent
6b02fc80d1
commit
4a6d551704
|
@ -157,29 +157,43 @@ class SearchStore(BackgroundUpdateStore):
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def _background_reindex_gin_search(self, progress, batch_size):
|
def _background_reindex_gin_search(self, progress, batch_size):
|
||||||
'''This handles old synapses which used GIST indexes, if any;
|
"""This handles old synapses which used GIST indexes, if any;
|
||||||
converting them back to be GIN as per the actual schema.
|
converting them back to be GIN as per the actual schema.
|
||||||
'''
|
"""
|
||||||
|
|
||||||
def create_index(conn):
|
def create_index(conn):
|
||||||
try:
|
|
||||||
conn.rollback()
|
conn.rollback()
|
||||||
|
|
||||||
|
# we have to set autocommit, because postgres refuses to
|
||||||
|
# CREATE INDEX CONCURRENTLY without it.
|
||||||
conn.set_session(autocommit=True)
|
conn.set_session(autocommit=True)
|
||||||
|
|
||||||
|
try:
|
||||||
c = conn.cursor()
|
c = conn.cursor()
|
||||||
|
|
||||||
|
# if we skipped the conversion to GIST, we may already/still
|
||||||
|
# have an event_search_fts_idx; unfortunately postgres 9.4
|
||||||
|
# doesn't support CREATE INDEX IF EXISTS so we just catch the
|
||||||
|
# exception and ignore it.
|
||||||
|
import psycopg2
|
||||||
|
try:
|
||||||
c.execute(
|
c.execute(
|
||||||
"CREATE INDEX CONCURRENTLY event_search_fts_idx"
|
"CREATE INDEX CONCURRENTLY event_search_fts_idx"
|
||||||
" ON event_search USING GIN (vector)"
|
" ON event_search USING GIN (vector)"
|
||||||
)
|
)
|
||||||
|
except psycopg2.ProgrammingError as e:
|
||||||
c.execute("DROP INDEX event_search_fts_idx_gist")
|
|
||||||
|
|
||||||
conn.set_session(autocommit=False)
|
|
||||||
except e:
|
|
||||||
logger.warn(
|
logger.warn(
|
||||||
"Ignoring error %s when trying to switch from GIST to GIN" % (e,)
|
"Ignoring error %r when trying to switch from GIST to GIN",
|
||||||
|
e
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# we should now be able to delete the GIST index.
|
||||||
|
c.execute(
|
||||||
|
"DROP INDEX IF EXISTS event_search_fts_idx_gist"
|
||||||
|
)
|
||||||
|
finally:
|
||||||
|
conn.set_session(autocommit=False)
|
||||||
|
|
||||||
if isinstance(self.database_engine, PostgresEngine):
|
if isinstance(self.database_engine, PostgresEngine):
|
||||||
yield self.runWithConnection(create_index)
|
yield self.runWithConnection(create_index)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue