diff options
author | Andrew Morgan <andrew@amorgan.xyz> | 2020-02-26 12:20:00 +0000 |
---|---|---|
committer | Andrew Morgan <andrew@amorgan.xyz> | 2020-02-26 12:20:00 +0000 |
commit | 5fbd93c21f8734d527889ccdfb2bb9a9b51f7fd2 (patch) | |
tree | a4da91173331f2905fdd32fc74322df4d8915734 /synapse | |
parent | media/thumbnailer: Better quality for 1-bit / 8-bit color palette images (#2142) (diff) | |
parent | Update `user_filters` table to have a unique index, and non-null columns (#1172) (diff) | |
download | synapse-5fbd93c21f8734d527889ccdfb2bb9a9b51f7fd2.tar.xz |
Update `user_filters` table to have a unique index, and non-null columns (#1172)
Diffstat (limited to 'synapse')
-rw-r--r-- | synapse/storage/schema/delta/56/unique_user_filter_index.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/synapse/storage/schema/delta/56/unique_user_filter_index.py b/synapse/storage/schema/delta/56/unique_user_filter_index.py new file mode 100644 index 0000000000..4efc1a586f --- /dev/null +++ b/synapse/storage/schema/delta/56/unique_user_filter_index.py @@ -0,0 +1,46 @@ +import logging + +from synapse.storage.engines import PostgresEngine + +logger = logging.getLogger(__name__) + + +def run_upgrade(cur, database_engine, *args, **kwargs): + if isinstance(database_engine, PostgresEngine): + select_clause = """ + CREATE TEMPORARY TABLE user_filters_migration AS + SELECT DISTINCT ON (user_id, filter_id) user_id, filter_id, filter_json + FROM user_filters; + """ + else: + select_clause = """ + CREATE TEMPORARY TABLE user_filters_migration AS + SELECT * FROM user_filters GROUP BY user_id, filter_id; + """ + sql = ( + """ + BEGIN; + %s + DROP INDEX user_filters_by_user_id_filter_id; + DELETE FROM user_filters; + ALTER TABLE user_filters + ALTER COLUMN user_id SET NOT NULL + ALTER COLUMN filter_id SET NOT NULL + ALTER COLUMN filter_json SET NOT NULL; + INSERT INTO user_filters(user_id, filter_id, filter_json) + SELECT * FROM user_filters_migration; + DROP TABLE user_filters_migration; + CREATE UNIQUE INDEX user_filters_by_user_id_filter_id_unique + ON user_filters(user_id, filter_id); + END; + """ + % select_clause + ) + if isinstance(database_engine, PostgresEngine): + cur.execute(sql) + else: + cur.executescript(sql) + + +def run_create(cur, database_engine, *args, **kwargs): + pass |