lemmy/migrations/2020-12-02-152437_create_site_aggregates/up.sql

96 lines
2.2 KiB
MySQL
Raw Normal View History

2020-12-03 03:39:31 +00:00
-- Add site aggregates
create table site_aggregates (
id serial primary key,
users bigint not null,
posts bigint not null,
comments bigint not null,
communities bigint not null
);
insert into site_aggregates (users, posts, comments, communities)
select ( select coalesce(count(*), 0) from user_) as users,
( select coalesce(count(*), 0) from post) as posts,
( select coalesce(count(*), 0) from comment) as comments,
( select coalesce(count(*), 0) from community) as communities;
-- Add site aggregate triggers
-- user
2020-12-03 15:18:17 +00:00
create function site_aggregates_user()
2020-12-03 03:39:31 +00:00
returns trigger language plpgsql
as $$
begin
2020-12-03 15:18:17 +00:00
IF (TG_OP = 'INSERT') THEN
update site_aggregates
set users = users + 1;
ELSIF (TG_OP = 'DELETE') THEN
update site_aggregates
set users = users - 1;
END IF;
2020-12-03 03:39:31 +00:00
return null;
end $$;
2020-12-03 15:18:17 +00:00
create trigger site_aggregates_user
after insert or delete on user_
execute procedure site_aggregates_user();
2020-12-03 03:39:31 +00:00
-- post
2020-12-03 15:18:17 +00:00
create function site_aggregates_post()
2020-12-03 03:39:31 +00:00
returns trigger language plpgsql
as $$
begin
2020-12-03 15:18:17 +00:00
IF (TG_OP = 'INSERT') THEN
update site_aggregates
set posts = posts + 1;
ELSIF (TG_OP = 'DELETE') THEN
update site_aggregates
set posts = posts - 1;
END IF;
2020-12-03 03:39:31 +00:00
return null;
end $$;
2020-12-03 15:18:17 +00:00
create trigger site_aggregates_post
after insert or delete on post
2020-12-07 03:17:52 +00:00
for each row
2020-12-03 15:18:17 +00:00
execute procedure site_aggregates_post();
2020-12-03 03:39:31 +00:00
-- comment
2020-12-03 15:18:17 +00:00
create function site_aggregates_comment()
2020-12-03 03:39:31 +00:00
returns trigger language plpgsql
as $$
begin
2020-12-03 15:18:17 +00:00
IF (TG_OP = 'INSERT') THEN
update site_aggregates
set comments = comments + 1;
ELSIF (TG_OP = 'DELETE') THEN
update site_aggregates
set comments = comments - 1;
END IF;
2020-12-03 03:39:31 +00:00
return null;
end $$;
2020-12-03 15:18:17 +00:00
create trigger site_aggregates_comment
after insert or delete on comment
2020-12-07 03:17:52 +00:00
for each row
2020-12-03 15:18:17 +00:00
execute procedure site_aggregates_comment();
2020-12-03 03:39:31 +00:00
-- community
2020-12-03 15:18:17 +00:00
create function site_aggregates_community()
2020-12-03 03:39:31 +00:00
returns trigger language plpgsql
as $$
begin
2020-12-03 15:18:17 +00:00
IF (TG_OP = 'INSERT') THEN
update site_aggregates
set communities = communities + 1;
ELSIF (TG_OP = 'DELETE') THEN
update site_aggregates
set communities = communities - 1;
END IF;
2020-12-03 03:39:31 +00:00
return null;
end $$;
2020-12-03 15:18:17 +00:00
create trigger site_aggregates_community
after insert or delete on community
2020-12-07 03:17:52 +00:00
for each row
2020-12-03 15:18:17 +00:00
execute procedure site_aggregates_community();
2020-12-03 03:39:31 +00:00