aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/migration_helper/object_id.ex26
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