aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--priv/repo/migrations/20211218181640_resolve_activity_object_conflicts.exs16
-rw-r--r--priv/repo/migrations/20211218181647_combine_activities_and_objects.exs2
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