diff options
author | Alex Gleason <alex@alexgleason.me> | 2022-01-01 21:38:44 -0600 |
---|---|---|
committer | Alex Gleason <alex@alexgleason.me> | 2022-01-01 21:38:44 -0600 |
commit | 990f98c0441888f0e999377cadb6544feced517b (patch) | |
tree | 00a47124600b9405241db82a070a33169a41b3c0 /lib | |
parent | bec555066d0a78670cf1dbc3d05e5647d242cb70 (diff) | |
download | pleroma-990f98c0441888f0e999377cadb6544feced517b.tar.gz |
ResolveActivityObjectConflicts: fix the foreign key error (temporarily disable triggers)
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/migration_helper/object_id.ex | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/lib/pleroma/migration_helper/object_id.ex b/lib/pleroma/migration_helper/object_id.ex index f122ff7b1..170c15666 100644 --- a/lib/pleroma/migration_helper/object_id.ex +++ b/lib/pleroma/migration_helper/object_id.ex @@ -19,14 +19,24 @@ defmodule Pleroma.MigrationHelper.ObjectId do @doc "Change an object's ID including all references." def change_id(%Object{id: old_id} = object, new_id) do Repo.transaction(fn -> - with {:ok, _} <- Repo.query("SET CONSTRAINTS ALL DEFERRED"), - {:ok, _} <- update_object_fk(MessageReference, old_id, new_id), - {:ok, _} <- update_object_fk(Delivery, old_id, new_id), - {:ok, _} <- update_object_fk(HashtagObject, old_id, new_id), - {:ok, _} <- update_object_fk(DataMigrationFailedId, old_id, new_id, :record_id), - {:ok, object} <- Repo.update(change(object, id: new_id)) do - {:ok, object} - end + # Temporarily disable triggers (and by consequence, fkey constraints) + # https://stackoverflow.com/a/18709987 + Repo.query!("SET session_replication_role = replica") + + # Update foreign keys + update_object_fk(MessageReference, old_id, new_id) + update_object_fk(Delivery, old_id, new_id) + update_object_fk(HashtagObject, old_id, new_id) + update_object_fk(DataMigrationFailedId, old_id, new_id, :record_id) + + # Update the object + object = Repo.update!(change(object, id: new_id)) + + # Re-enable triggers + Repo.query!("SET session_replication_role = DEFAULT") + + # Return the object + object end) end |