63 lines
1.9 KiB
MySQL
63 lines
1.9 KiB
MySQL
|
alter table records rename to records_like;
|
||
|
|
||
|
create table records
|
||
|
(like records_like including defaults)
|
||
|
partition by list (collection);
|
||
|
|
||
|
drop index idx_repo_record_key;
|
||
|
drop index idx_repo_rev;
|
||
|
alter table records_like drop constraint records_pkey;
|
||
|
create unique index records_pkey on records (id, collection);
|
||
|
|
||
|
create table records_default
|
||
|
partition of records default;
|
||
|
|
||
|
create table records_post
|
||
|
partition of records for values in ('app.bsky.feed.post');
|
||
|
create table records_follow
|
||
|
partition of records for values in ('app.bsky.graph.follow');
|
||
|
create table records_block
|
||
|
partition of records for values in ('app.bsky.graph.block');
|
||
|
create table records_repost
|
||
|
partition of records for values in ('app.bsky.feed.repost');
|
||
|
create table records_profile
|
||
|
partition of records for values in ('app.bsky.actor.profile');
|
||
|
|
||
|
ALTER TABLE records_like
|
||
|
ADD CHECK (collection in ('app.bsky.feed.like'));
|
||
|
|
||
|
ALTER TABLE records_post
|
||
|
ADD CHECK (collection in ('app.bsky.feed.post'));
|
||
|
|
||
|
ALTER TABLE records_follow
|
||
|
ADD CHECK (collection in ('app.bsky.graph.follow'));
|
||
|
|
||
|
ALTER TABLE records_repost
|
||
|
ADD CHECK (collection in ('app.bsky.feed.repost'));
|
||
|
|
||
|
ALTER TABLE records_profile
|
||
|
ADD CHECK (collection in ('app.bsky.actor.profile'));
|
||
|
|
||
|
-- SLOW, can run overnight
|
||
|
with moved_rows as (
|
||
|
delete from records_like r
|
||
|
where collection <> 'app.bsky.feed.like'
|
||
|
returning r.*
|
||
|
)
|
||
|
insert into records select * from moved_rows;
|
||
|
|
||
|
-- ULTRA SLOW, DO NOT RUN on large DB
|
||
|
alter table records attach partition records_like for values in ('app.bsky.feed.like');
|
||
|
|
||
|
create index idx_like_subject
|
||
|
on records_like
|
||
|
(split_part(jsonb_extract_path_text(content, 'subject', 'uri'), '/', 3));
|
||
|
|
||
|
create index idx_follow_subject
|
||
|
on records_follow
|
||
|
(jsonb_extract_path_text(content, 'subject'));
|
||
|
|
||
|
create index idx_reply_subject
|
||
|
on records_post
|
||
|
(split_part(jsonb_extract_path_text(content, 'reply', 'parent', 'uri'), '/', 3));
|