fixed tests, implemented sql based partitioning for favorites
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -9,14 +9,44 @@ class CreateFavorites < ActiveRecord::Migration
|
||||
end
|
||||
|
||||
0.upto(TABLE_COUNT - 1) do |i|
|
||||
create_table "favorites_#{i}" do |t|
|
||||
t.column :user_id, :integer
|
||||
t.column :post_id, :integer
|
||||
end
|
||||
execute <<-EOS
|
||||
create table favorites_#{i} (
|
||||
check (user_id % 100 = #{i})
|
||||
) inherits (favorites)
|
||||
EOS
|
||||
|
||||
add_index "favorites_#{i}", :user_id
|
||||
add_index "favorites_#{i}", :post_id
|
||||
end
|
||||
|
||||
fragment = []
|
||||
|
||||
1.upto(TABLE_COUNT - 1) do |i|
|
||||
fragment << <<-EOS
|
||||
elsif (NEW.user_id % 100 = #{i}) then
|
||||
insert into favorites_#{i} values (NEW.*);
|
||||
EOS
|
||||
end
|
||||
|
||||
execute <<-EOS
|
||||
create or replace function favorites_insert_trigger()
|
||||
returns trigger as $$
|
||||
begin
|
||||
if (NEW.user_id % 100 = 0) then
|
||||
insert into favorites_0 values (NEW.*);
|
||||
#{fragment.join("\n")}
|
||||
end if;
|
||||
return NULL;
|
||||
end;
|
||||
$$
|
||||
language plpgsql
|
||||
EOS
|
||||
|
||||
execute <<-EOS
|
||||
create trigger insert_favorites_trigger
|
||||
before insert on favorites
|
||||
for each row execute procedure favorites_insert_trigger()
|
||||
EOS
|
||||
end
|
||||
|
||||
def self.down
|
||||
|
||||
Reference in New Issue
Block a user