~cytrogen/masto-fe

0e2a4d3897ea3c5117b5cc7f91df4821515ef696 — Eugen Rochko 2 years ago 72423bc
Fix adding column with default value taking longer on Postgres >= 11 (#26375)

1 files changed, 13 insertions(+), 1 deletions(-)

M lib/mastodon/migration_helpers.rb
M lib/mastodon/migration_helpers.rb => lib/mastodon/migration_helpers.rb +13 -1
@@ 195,7 195,14 @@ module Mastodon
    def supports_drop_index_concurrently?
      version = select_one("SELECT current_setting('server_version_num') AS v")['v'].to_i

      version >= 90200
      version >= 90_200
    end

    # Only available on Postgresql >= 11
    def supports_add_column_with_default?
      version = select_one("SELECT current_setting('server_version_num') AS v")['v'].to_i

      version >= 11_000
    end

    # Adds a foreign key with only minimal locking on the tables involved.


@@ 414,6 421,11 @@ module Mastodon
    # This method can also take a block which is passed directly to the
    # `update_column_in_batches` method.
    def add_column_with_default(table, column, type, default:, limit: nil, allow_null: false, &block)
      if supports_add_column_with_default?
        add_column(table, column, type, default: default, limit: limit, null: allow_null)
        return
      end

      if transaction_open?
        raise 'add_column_with_default can not be run inside a transaction, ' \
          'you can disable transactions by calling disable_ddl_transaction! ' \