class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter

Constants

PG_CONNECT_RETRY
PG_QUERY_RETRY
PG_RECONNECT_RETRY
PG_SLEEP_RETRY

Public Instance Methods

connect() click to toggle source
# File lib/active_record_postgresql_retry.rb, line 57
def connect

  begin
    result = old_connect
    @retry = nil
    result
  rescue PG::Error => ex
    @retry ||= 1
    $log.warn "PostgreSQL connect not possible, retry ##{@retry}: #{ex}"
    sleep PG_SLEEP_RETRY
    @retry += 1
    raise if @retry > PG_CONNECT_RETRY
  end

  if @retry.nil?
    result
  else
    connect
  end

end
Also aliased as: old_connect
execute(sql, name=nil) click to toggle source
# File lib/active_record_postgresql_retry.rb, line 15
def execute(sql, name=nil)
  begin
    result = old_execute(sql, name)
    @retry = nil
    result
  rescue PG::ConnectionBad, PG::UnableToSend => ex
    @retry ||= 1
    $log.warn "PostgreSQL statement invalid, retrying #{sql}: #{ex}"
    sleep PG_SLEEP_RETRY
    @retry += 1
    raise if @retry > PG_QUERY_RETRY
  end

  if @retry.nil?
    result
  else
    execute(sql, name)
  end

end
Also aliased as: old_execute
old_connect()
Alias for: connect
old_execute(sql, name=nil)
Alias for: execute
old_reconnect!()
Alias for: reconnect!
reconnect!() click to toggle source
# File lib/active_record_postgresql_retry.rb, line 36
def reconnect!
  begin
    result = old_reconnect!
    @retry = nil
    result
  rescue PG::Error => ex
    @retry ||= 1
    $log.warn "PostgreSQL reconnect not possible, retry ##{@retry}: #{ex}"
    sleep PG_SLEEP_RETRY
    @retry += 1
    raise if @retry > PG_RECONNECT_RETRY
  end

  if @retry.nil?
    result
  else
    reconnect!
  end

end
Also aliased as: old_reconnect!