aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrinpatch <rinpatch@sdf.org>2019-04-18 23:34:01 +0300
committerrinpatch <rinpatch@sdf.org>2019-04-18 23:34:01 +0300
commit099f89367efaf4032b8e937258b2c1a90f16b047 (patch)
treebb4de800b732e8ce9c101a87619e859e8d77bf36
parent9238dccac1310fc2e281b242768a2de79f405f35 (diff)
downloadpleroma-099f89367efaf4032b8e937258b2c1a90f16b047.tar.gz
Replace embedded object migration with a mix task
-rw-r--r--lib/mix/tasks/pleroma/database.ex45
-rw-r--r--priv/repo/migrations/20190418072951_remove_embeded_objects.exs10
2 files changed, 45 insertions, 10 deletions
diff --git a/lib/mix/tasks/pleroma/database.ex b/lib/mix/tasks/pleroma/database.ex
new file mode 100644
index 000000000..ce3252af5
--- /dev/null
+++ b/lib/mix/tasks/pleroma/database.ex
@@ -0,0 +1,45 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Mix.Tasks.Pleroma.Database do
+ alias Mix.Tasks.Pleroma.Common
+ use Mix.Task
+
+ @shortdoc "A collection of database related tasks"
+ @moduledoc """
+ A collection of database related tasks
+
+ ## Replace embedded objects with their references
+
+ Replaces embedded objects with references to them in the `objects` table. Only needs to be ran once. The reason why this is not a migration is because it could significantly increase the database size after being ran, however after this `VACUUM FULL` will be able to reclaim about 20% (really depends on what is in the database, your mileage may vary) of the db size before the migration.
+
+ mix pleroma.database remove_embedded_objects
+
+ Options:
+ - `--vacuum` - run `VACUUM FULL` after the embedded objects are replaced with their references
+ """
+ def run(["remove_embedded_objects" | args]) do
+ {options, [], []} =
+ OptionParser.parse(
+ args,
+ strict: [
+ vacuum: :boolean
+ ]
+ )
+
+ Common.start_pleroma()
+
+ Ecto.Adapters.SQL.query!(
+ Pleroma.Repo,
+ "update activities set data = jsonb_set(data, '{object}'::text[], data->'object'->'id') where data->'object'->>'id' is not null;"
+ )
+
+ if Keyword.get(options, :vacuum) do
+ Ecto.Adapters.SQL.query!(
+ Pleroma.Repo,
+ "vacuum full;"
+ )
+ end
+ end
+end
diff --git a/priv/repo/migrations/20190418072951_remove_embeded_objects.exs b/priv/repo/migrations/20190418072951_remove_embeded_objects.exs
deleted file mode 100644
index 128094278..000000000
--- a/priv/repo/migrations/20190418072951_remove_embeded_objects.exs
+++ /dev/null
@@ -1,10 +0,0 @@
-defmodule Pleroma.Repo.Migrations.RemoveEmbededObjects do
- use Ecto.Migration
-
- # TODO: bench on a real DB and add clippy if it takes too long
- def change do
- execute """
- update activities set data = jsonb_set(data, '{object}'::text[], data->'object'->'id') where data->>'type' = 'Create' and data->'object'->>'id' is not null;
- """
- end
-end