diff options
-rw-r--r-- | priv/repo/migrations/20211218181640_resolve_activity_object_conflicts.exs | 16 | ||||
-rw-r--r-- | priv/repo/migrations/20211218181647_combine_activities_and_objects.exs | 2 |
2 files changed, 17 insertions, 1 deletions
diff --git a/priv/repo/migrations/20211218181640_resolve_activity_object_conflicts.exs b/priv/repo/migrations/20211218181640_resolve_activity_object_conflicts.exs index 2c24c32f3..28700d3d8 100644 --- a/priv/repo/migrations/20211218181640_resolve_activity_object_conflicts.exs +++ b/priv/repo/migrations/20211218181640_resolve_activity_object_conflicts.exs @@ -12,6 +12,17 @@ defmodule Pleroma.Repo.Migrations.ResolveActivityObjectConflicts do import Ecto.Query def up do + # Lock relevant tables + execute("LOCK TABLE objects") + execute("LOCK TABLE chat_message_references") + execute("LOCK TABLE deliveries") + execute("LOCK TABLE hashtags_objects") + + # Temporarily disable fkey constraints + disable_constraint("chat_message_references", "chat_message_references_object_id_fkey") + disable_constraint("deliveries", "deliveries_object_id_fkey") + disable_constraint("hashtags_objects", "hashtags_objects_object_id_fkey") + activity_conflict_query() |> Repo.stream() |> Stream.each(&update_object/1) @@ -32,4 +43,9 @@ defmodule Pleroma.Repo.Migrations.ResolveActivityObjectConflicts do def down do :ok end + + # https://stackoverflow.com/a/48335239 + defp disable_constraint(table, constraint) do + execute("ALTER TABLE #{table} ALTER CONSTRAINT #{constraint} DEFERRABLE INITIALLY DEFERRED") + end end diff --git a/priv/repo/migrations/20211218181647_combine_activities_and_objects.exs b/priv/repo/migrations/20211218181647_combine_activities_and_objects.exs index bc692d99d..09eb10a58 100644 --- a/priv/repo/migrations/20211218181647_combine_activities_and_objects.exs +++ b/priv/repo/migrations/20211218181647_combine_activities_and_objects.exs @@ -7,7 +7,7 @@ defmodule Pleroma.Repo.Migrations.CombineActivitiesAndObjects do def up do # Lock both tables to avoid a running server meddling with our transaction execute("LOCK TABLE activities") - execute("LOCK TABLE users") + execute("LOCK TABLE objects") # Add missing fields to objects table alter table(:objects) do |