Deal with collation-related index corruption (#14860)
* Add tootctl maintenance fix-duplicates This tool goes through the database to detect and fix duplicates. This operation is very slow and may cause data loss (of data that would be inaccessible without intervention because of the existing index corruptions). It tries its best to make sensible decisions, and asks the user in some cases. * Add warning message in db:migrate hook * Clear Rails cache after being done with database deduplication Avoids followers hash cache being incorrect, among other things
This commit is contained in:
parent
29e76f994e
commit
1242e57c27
3 changed files with 625 additions and 0 deletions
|
@ -48,6 +48,17 @@ namespace :db do
|
|||
end
|
||||
end
|
||||
|
||||
task :post_migration_hook do
|
||||
at_exit do
|
||||
unless %w(C POSIX).include?(ActiveRecord::Base.connection.execute('SELECT datcollate FROM pg_database WHERE datname = current_database();').first['datcollate'])
|
||||
Rails.logger.warn 'WARNING: Your database is using an unsafe collation setting, which might result in index corruption.'
|
||||
Rails.logger.warn 'WARNING: See https://docs.joinmastodon.org/admin/troubleshooting/index-corruption/#am-i-affected'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Rake::Task['db:migrate'].enhance(['db:post_migration_hook'])
|
||||
|
||||
# Before we load the schema, define the timestamp_id function.
|
||||
# Idiomatically, we might do this in a migration, but then it
|
||||
# wouldn't end up in schema.rb, so we'd need to figure out a way to
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue