def create_index_psql(conn: Connection) -> None: conn.rollback() # postgres insists on autocommit for the index conn.set_session(autocommit=True) # type: ignore try: c = conn.cursor() # If a previous attempt to create the index was interrupted, # we may already have a half-built index. Let's just drop it # before trying to create it again. sql = "DROP INDEX IF EXISTS %s" % (index_name,) logger.debug("[SQL] %s", sql) c.execute(sql) sql = ( "CREATE %(unique)s INDEX CONCURRENTLY %(name)s" " ON %(table)s" " (%(columns)s) %(where_clause)s" ) % { "unique": "UNIQUE" if unique else "", "name": index_name, "table": table, "columns": ", ".join(columns), "where_clause": "WHERE " + where_clause if where_clause else "", } logger.debug("[SQL] %s", sql) c.execute(sql) finally: conn.set_session(autocommit=False) # type: ignore
def attempt_to_set_autocommit(self, conn: Connection, autocommit: bool): return conn.set_session(autocommit=autocommit) # type: ignore