Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Capture minimum postgres version 12 #27528

Merged
merged 1 commit into from
Oct 26, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ Mastodon acts as an OAuth2 provider, so 3rd party apps can use the REST and Stre

### Requirements

- **PostgreSQL** 9.5+
- **PostgreSQL** 12+
- **Redis** 4+
- **Ruby** 2.7+
- **Node.js** 16+
Expand Down
2 changes: 1 addition & 1 deletion config/initializers/strong_migrations.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# frozen_string_literal: true

StrongMigrations.start_after = 2017_09_24_022025
StrongMigrations.target_version = 10
StrongMigrations.target_version = 12
63 changes: 5 additions & 58 deletions lib/mastodon/migration_helpers.rb
Original file line number Diff line number Diff line change
Expand Up @@ -158,10 +158,8 @@ def remove_concurrent_index(table_name, column_name, **options)
'in the body of your migration class'
end

if supports_drop_index_concurrently?
options = options.merge({ algorithm: :concurrently })
disable_statement_timeout
end
options = options.merge({ algorithm: :concurrently })
disable_statement_timeout

remove_index(table_name, **options.merge({ column: column_name }))
end
Expand All @@ -182,28 +180,12 @@ def remove_concurrent_index_by_name(table_name, index_name, **options)
'in the body of your migration class'
end

if supports_drop_index_concurrently?
options = options.merge({ algorithm: :concurrently })
disable_statement_timeout
end
options = options.merge({ algorithm: :concurrently })
disable_statement_timeout

remove_index(table_name, **options.merge({ name: index_name }))
end

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

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 >= 110_000
end

# Adds a foreign key with only minimal locking on the tables involved.
#
# This method only requires minimal locking when using PostgreSQL. When
Expand Down Expand Up @@ -420,42 +402,7 @@ def update_column_in_batches(table_name, column, value)
# 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! ' \
'in the body of your migration class'
end

disable_statement_timeout

transaction do
if limit
add_column(table, column, type, default: nil, limit: limit)
else
add_column(table, column, type, default: nil)
end

# Changing the default before the update ensures any newly inserted
# rows already use the proper default value.
change_column_default(table, column, default)
end

begin
update_column_in_batches(table, column, default, &block)

change_column_null(table, column, false) unless allow_null
# We want to rescue _all_ exceptions here, even those that don't inherit
# from StandardError.
rescue Exception => error # rubocop: disable all
remove_column(table, column)

raise error
end
add_column(table, column, type, default: default, limit: limit, null: allow_null)
end

# Renames a column without requiring downtime.
Expand Down