Update in chunks.
authorRoger Braun <rbraun@Bobble.local>
Thu, 9 Nov 2017 11:33:38 +0000 (12:33 +0100)
committerRoger Braun <rbraun@Bobble.local>
Thu, 9 Nov 2017 11:33:38 +0000 (12:33 +0100)
priv/repo/migrations/20171109091239_add_actor_to_activity.exs

index bac53972cfb6c778e5f9c0b3a6cda523a0222042..c04922c7684d1b9bb19208d4f7a10b866ca852d5 100644 (file)
@@ -1,6 +1,8 @@
 defmodule Pleroma.Repo.Migrations.AddActorToActivity do
   use Ecto.Migration
 
+  alias Pleroma.{Repo, Activity}
+
   @disable_ddl_transaction true
 
   def up do
@@ -8,9 +10,18 @@ defmodule Pleroma.Repo.Migrations.AddActorToActivity do
       add :actor, :string
     end
 
-    execute """
-      update activities set actor = data->>'actor';
-    """
+    max = Repo.aggregate(Activity, :max, :id)
+    IO.puts("#{max} activities")
+    chunks = 0..(round(max / 10_000))
+
+    Enum.each(chunks, fn (i) ->
+      min = i * 10_000
+      max = min + 10_000
+      IO.puts("Updating #{min}")
+      execute """
+        update activities set actor = data->>'actor' where id > #{min} and id <= #{max};
+      """
+    end)
 
     create index(:activities, [:actor, "id DESC NULLS LAST"], concurrently: true)
   end