Merge branch 'fix/prune-hashtags' into 'develop'
authorfeld <feld@feld.me>
Mon, 7 Jun 2021 20:11:45 +0000 (20:11 +0000)
committerfeld <feld@feld.me>
Mon, 7 Jun 2021 20:11:45 +0000 (20:11 +0000)
get prune_objects to work again

See merge request pleroma/pleroma!3397

CHANGELOG.md
lib/mix/tasks/pleroma/database.ex
priv/repo/migrations/20210420204354_delete_hashtags_objects_cascade.exs [new file with mode: 0644]

index 24c029bf334d2794ebcd0c02251003292a5a2b53..daa8f2ff62884e71ba2d14221ae0a61c1cd9f158 100644 (file)
@@ -25,6 +25,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 ### Fixed
 - Don't crash so hard when email settings are invalid.
 - Checking activated Upload Filters for required commands.
+- Mix task `pleroma.database prune_objects`
 
 ### Removed
 - **Breaking**: Remove deprecated `/api/qvitter/statuses/notifications/read` (replaced by `/api/v1/pleroma/notifications/read`)
index e7f4b67a463d5b8b1dd540901b0db47e853d0a3b..57f73d12baa0bc70e6a11e243358a9c66aeec14e 100644 (file)
@@ -96,6 +96,15 @@ defmodule Mix.Tasks.Pleroma.Database do
     )
     |> Repo.delete_all(timeout: :infinity)
 
+    prune_hashtags_query = """
+    DELETE FROM hashtags AS ht
+    WHERE NOT EXISTS (
+      SELECT 1 FROM hashtags_objects hto
+      WHERE ht.id = hto.hashtag_id)
+    """
+
+    Repo.query(prune_hashtags_query)
+
     if Keyword.get(options, :vacuum) do
       Maintenance.vacuum("full")
     end
diff --git a/priv/repo/migrations/20210420204354_delete_hashtags_objects_cascade.exs b/priv/repo/migrations/20210420204354_delete_hashtags_objects_cascade.exs
new file mode 100644 (file)
index 0000000..f4ebf53
--- /dev/null
@@ -0,0 +1,19 @@
+defmodule Pleroma.Repo.Migrations.DeleteHashtagsObjectsCascade do
+  use Ecto.Migration
+
+  def up do
+    execute("ALTER TABLE hashtags_objects DROP CONSTRAINT hashtags_objects_object_id_fkey")
+
+    alter table(:hashtags_objects) do
+      modify(:object_id, references(:objects, on_delete: :delete_all))
+    end
+  end
+
+  def down do
+    execute("ALTER TABLE hashtags_objects DROP CONSTRAINT hashtags_objects_object_id_fkey")
+
+    alter table(:hashtags_objects) do
+      modify(:object_id, references(:objects, on_delete: :nothing))
+    end
+  end
+end