"""partition_sc_track_stats Revision ID: a40a9ac2be6e Revises: 486e4e6927bc Create Date: 2018-07-15 19:32:18.734524 """ # revision identifiers, used by Alembic. revision = 'a40a9ac2be6e' down_revision = '486e4e6927bc' branch_labels = None depends_on = None from alembic import op import sqlalchemy as sa def upgrade(): op.execute('alter table sc_track_stats drop constraint fk_sc_track_stats_0') op.execute(""" create table sc_track_stats_parts ( track_scid int not null, as_of date not null, playback_count int not null, download_count int not null, favoritings_count int not null, comment_count int not null ) partition by range (track_scid); create table sc_track_stats_0 partition of sc_track_stats_parts for values from (0) to (150000000); create unique index on sc_track_stats_0 (track_scid, as_of); \n """ + "\n".join( [ ( "create table sc_track_stats_{0} " "partition of sc_track_stats_parts " "for values from ({1}) to ({2});\n" "create unique index on sc_track_stats_{0} (track_scid, as_of);\n" ).format(i, i * 15_000_000, (i + 1) * 15_000_000) for i in range(10, 40) ] )) op.execute(""" insert into sc_track_stats_parts (track_scid, as_of, playback_count, download_count, favoritings_count, comment_count) select track_scid, as_of::date, playback_count, download_count, favoritings_count, comment_count from sc_track_stats; """) def downgrade(): for i in range(50): op.execute('drop table if exists sc_track_stats_{}'.format(i)) op.execute('drop table if exists sc_track_stats_parts') op.create_foreign_key('fk_sc_track_stats_0', 'sc_track_stats', 'sc_tracks', ['track_scid'], ['scid'])