124 lines
2.9 KiB
PL/PgSQL
124 lines
2.9 KiB
PL/PgSQL
-- 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
|
|
create function site_aggregates_user_increment()
|
|
returns trigger language plpgsql
|
|
as $$
|
|
begin
|
|
update site_aggregates
|
|
set users = users + 1;
|
|
return null;
|
|
end $$;
|
|
|
|
create trigger site_aggregates_insert_user
|
|
after insert on user_
|
|
execute procedure site_aggregates_user_increment();
|
|
|
|
create function site_aggregates_user_decrement()
|
|
returns trigger language plpgsql
|
|
as $$
|
|
begin
|
|
update site_aggregates
|
|
set users = users - 1;
|
|
return null;
|
|
end $$;
|
|
|
|
create trigger site_aggregates_delete_user
|
|
after delete on user_
|
|
execute procedure site_aggregates_user_decrement();
|
|
|
|
-- post
|
|
create function site_aggregates_post_increment()
|
|
returns trigger language plpgsql
|
|
as $$
|
|
begin
|
|
update site_aggregates
|
|
set posts = posts + 1;
|
|
return null;
|
|
end $$;
|
|
|
|
create trigger site_aggregates_insert_post
|
|
after insert on post
|
|
execute procedure site_aggregates_post_increment();
|
|
|
|
create function site_aggregates_post_decrement()
|
|
returns trigger language plpgsql
|
|
as $$
|
|
begin
|
|
update site_aggregates
|
|
set posts = posts - 1;
|
|
return null;
|
|
end $$;
|
|
|
|
create trigger site_aggregates_delete_post
|
|
after delete on post
|
|
execute procedure site_aggregates_post_decrement();
|
|
|
|
-- comment
|
|
create function site_aggregates_comment_increment()
|
|
returns trigger language plpgsql
|
|
as $$
|
|
begin
|
|
update site_aggregates
|
|
set comments = comments + 1;
|
|
return null;
|
|
end $$;
|
|
|
|
create trigger site_aggregates_insert_comment
|
|
after insert on comment
|
|
execute procedure site_aggregates_comment_increment();
|
|
|
|
create function site_aggregates_comment_decrement()
|
|
returns trigger language plpgsql
|
|
as $$
|
|
begin
|
|
update site_aggregates
|
|
set comments = comments - 1;
|
|
return null;
|
|
end $$;
|
|
|
|
create trigger site_aggregates_delete_comment
|
|
after delete on comment
|
|
execute procedure site_aggregates_comment_decrement();
|
|
|
|
-- community
|
|
create function site_aggregates_community_increment()
|
|
returns trigger language plpgsql
|
|
as $$
|
|
begin
|
|
update site_aggregates
|
|
set communities = communities + 1;
|
|
return null;
|
|
end $$;
|
|
|
|
create trigger site_aggregates_insert_community
|
|
after insert on community
|
|
execute procedure site_aggregates_community_increment();
|
|
|
|
create function site_aggregates_community_decrement()
|
|
returns trigger language plpgsql
|
|
as $$
|
|
begin
|
|
update site_aggregates
|
|
set communities = communities - 1;
|
|
return null;
|
|
end $$;
|
|
|
|
create trigger site_aggregates_delete_community
|
|
after delete on community
|
|
execute procedure site_aggregates_community_decrement();
|
|
|