Module: Databases::Management
- Includes:
- DatabaseConnectionHelpers
- Included in:
- Sequel::Postgres::Bootstrap
- Defined in:
- lib/runtime/database.rb
Overview
The Databases::Management module
Constant Summary collapse
- CannotDropOpenDatabaseErrorPattern =
rubocop: enable Metrics/AbcSize rubocop: enable Metrics/MethodLength
/ERROR: cannot drop the currently open database/.freeze
Constants included from DatabaseConnectionHelpers
DatabaseConnectionHelpers::AmpersandString, DatabaseConnectionHelpers::ColonString, DatabaseConnectionHelpers::ConnectionAttempts, DatabaseConnectionHelpers::DatabaseOrRoleDoesNotExistPattern, DatabaseConnectionHelpers::DefaultConnectionOptions, DatabaseConnectionHelpers::DefaultConnectionPoolSize, DatabaseConnectionHelpers::DefaultConnectionValidationTimeoutSeconds, DatabaseConnectionHelpers::EmptyString, DatabaseConnectionHelpers::ForwardSlashString, DatabaseConnectionHelpers::JavaPattern, DatabaseConnectionHelpers::KeyValueTemplate, DatabaseConnectionHelpers::QuestionMarkString, DatabaseConnectionHelpers::URLTemplate
Instance Method Summary collapse
-
#create_database(database_name = database, username = database) ⇒ Object
rubocop: disable Metrics/AbcSize rubocop: disable Metrics/MethodLength.
-
#drop_database(database_name = database) ⇒ Object
rubocop: disable Metrics/AbcSize rubocop: disable Metrics/MethodLength.
-
#reconnect_database(url) ⇒ Object
rubocop: disable Metrics/AbcSize rubocop: disable Metrics/MethodLength.
Methods included from DatabaseConnectionHelpers
#assemble_url, #connect, #sanitize_url
Instance Method Details
#create_database(database_name = database, username = database) ⇒ Object
rubocop: disable Metrics/AbcSize rubocop: disable Metrics/MethodLength
243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 |
# File 'lib/runtime/database.rb', line 243 def create_database(database_name = database, username = database) return false if database_exist?(database_name) begin log.info "Creating database: #{database_name}" create_user username unless user_exist?(username) run "create database #{database_name} owner #{username}" rescue StandardError => e database_already_exists_error_pattern = /ERROR: database "#{database_name}" already exists/ if database_already_exists_error_pattern.match?(e.to_s) unless defined? tried_once_already drop_database database_name tried_once_already = true # rubocop: disable Lint/UselessAssignment retry end end log.error "Unexpected error creating database: #{e.inspect}" e.backtrace.each { |t| log.error t } return false end end |
#drop_database(database_name = database) ⇒ Object
rubocop: disable Metrics/AbcSize rubocop: disable Metrics/MethodLength
270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 |
# File 'lib/runtime/database.rb', line 270 def drop_database(database_name = database) return false unless database_exist?(database_name) begin log.info "Dropping database: #{database_name}" run "drop database #{database_name}" rescue Sequel::DatabaseError => e log.error "Unexpected error creating database: #{e.inspect}" e.backtrace.each { |t| log.error t } return false rescue StandardError => e if CannotDropOpenDatabaseErrorPattern.match?(e.to_s) results = execute "select procpid from pg_stat_activity where datname = '#{database_name}'" results.each do |row| log.debug "You must first kill process with pid #{row['procpid']}" command = format('sudo kill -9 %<procpid>s', procpid: row['procpid']) log.debug "Execute: #{command}" # `#{command}` end end log.error "Unexpected error creating database: #{e.inspect}" e.backtrace.each { |t| log.error t } return false end end |
#reconnect_database(url) ⇒ Object
rubocop: disable Metrics/AbcSize rubocop: disable Metrics/MethodLength
221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 |
# File 'lib/runtime/database.rb', line 221 def reconnect_database(url) log.debug "Reconnecting to database #{sanitize_url(url)}" begin Sequel::Model.db&.disconnect rescue StandardError => e log.warn "Encountered unexpected error disconnecting from database: #{e.message}" end Sequel::Model.db = Sequel.connect(url) Sequel::Model.descendants.each do |model| model_dataset = begin model.dataset rescue Sequel::Error => e nil end model.db = Sequel::Model.db if model_dataset.nil? end end |