diff options
Diffstat (limited to 'lib/mix')
| -rw-r--r-- | lib/mix/tasks/pleroma/database.ex | 45 | 
1 files changed, 45 insertions, 0 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 | 
