Skip to content

Commit

Permalink
Capture minimum postgres version 12 (mastodon#27528)
Browse files Browse the repository at this point in the history
  • Loading branch information
mjankowski authored and 000hen committed Dec 6, 2023
1 parent 4eb9a7b commit a1cde50
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 60 deletions.
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

0 comments on commit a1cde50

Please sign in to comment.