Migrate default intervalstyle in database

By switching the `intervalstyle`, we assume to fix CODEOCEAN-FT. It is caused by by PgBouncer providing different database connections to Rails that might behave differently.
This commit is contained in:
Sebastian Serth
2022-12-06 23:43:06 +01:00
parent bc5baed05e
commit 6bfda8e552
4 changed files with 33 additions and 1 deletions

View File

@ -0,0 +1,27 @@
# frozen_string_literal: true
class SetDatabaseIntervalStyle < ActiveRecord::Migration[7.0]
# We set the intervalstyle to ISO 8601 for the current database.
# Without this change, a transaction-based PgBouncer might cause
# issues with when switching between different sessions (e.g., by
# returning intervals in the default intervalstyle).
def change
connection = ActiveRecord::Base.connection
dbname = connection.current_database
reversible do |dir|
dir.up do
execute <<~SQL.squish
ALTER DATABASE "#{dbname}" SET intervalstyle = 'iso_8601';
SQL
end
dir.down do
execute <<~SQL.squish
ALTER DATABASE "#{dbname}" SET intervalstyle = 'postgres';
SQL
end
end
end
end

View File

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.0].define(version: 2022_12_04_120508) do
ActiveRecord::Schema[7.0].define(version: 2022_12_06_221333) do
# These are extensions that must be enabled in order to support this database
enable_extension "pg_trgm"
enable_extension "pgcrypto"

View File

@ -22,6 +22,10 @@ end
Rails.application.eager_load!
(ApplicationRecord.descendants - [ActiveRecord::SchemaMigration, User]).each(&:delete_all)
# Set the default intervalstyle to iso_8601
dbname = ApplicationRecord.connection.current_database
ApplicationRecord.connection.exec_query("ALTER DATABASE \"#{dbname}\" SET intervalstyle = 'iso_8601';")
# delete file uploads
FileUtils.rm_rf(Rails.public_path.join('uploads'))