class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter

def add_pg_decoders

def add_pg_decoders
  @default_timezone = nil
  @timestamp_decoder = nil
  coders_by_name = {
    "int2" => PG::TextDecoder::Integer,
    "int4" => PG::TextDecoder::Integer,
    "int8" => PG::TextDecoder::Integer,
    "oid" => PG::TextDecoder::Integer,
    "float4" => PG::TextDecoder::Float,
    "float8" => PG::TextDecoder::Float,
    "numeric" => PG::TextDecoder::Numeric,
    "bool" => PG::TextDecoder::Boolean,
    "timestamp" => PG::TextDecoder::TimestampUtc,
    "timestamptz" => PG::TextDecoder::TimestampWithTimeZone,
  }
  known_coder_types = coders_by_name.keys.map { |n| quote(n) }
  query = <<~SQL % known_coder_types.join(", ")
    SELECT t.oid, t.typname
    FROM pg_type as t
    WHERE t.typname IN (%s)
  SQL
  coders = execute_and_clear(query, "SCHEMA", []) do |result|
    result.filter_map { |row| construct_coder(row, coders_by_name[row["typname"]]) }
  end
  map = PG::TypeMapByOid.new
  coders.each { |coder| map.add_coder(coder) }
  @connection.type_map_for_results = map
  @type_map_for_results = PG::TypeMapByOid.new
  @type_map_for_results.default_type_map = map
  @type_map_for_results.add_coder(PG::TextDecoder::Bytea.new(oid: 17, name: "bytea"))
  @type_map_for_results.add_coder(MoneyDecoder.new(oid: 790, name: "money"))
  # extract timestamp decoder for use in update_typemap_for_default_timezone
  @timestamp_decoder = coders.find { |coder| coder.name == "timestamp" }
  update_typemap_for_default_timezone
end