You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级至pg 1.5.2后出现PG::Coder.new(hash)弃用警告,寻求解决方法

解决pg 1.5.2升级后PG::Coder.new(hash)弃用警告问题

问题根源:pg gem 1.5.2开始弃用了PG::Coder.new(hash)的传参方式,要求改用关键字参数,但你当前使用的Rails 7.0.4.3尚未适配这个变化,因此控制台持续出现警告。

以下是几种可行的解决办法:

  • 升级Rails版本:直接把Rails升级到7.0.5或更高版本,官方已经在这个版本修复了对pg 1.5+的适配问题,升级后警告会自动消失。
  • 猴子补丁临时修复:如果暂时无法升级Rails,可通过补丁修改ActiveRecord的适配方法:
    在项目的config/initializers目录下新建fix_pg_coder_warning.rb文件,写入以下代码:
# config/initializers/fix_pg_coder_warning.rb
module ActiveRecord
  module ConnectionAdapters
    class PostgreSQLAdapter < AbstractAdapter
      def update_typemap_for_default_timezone
        if @default_timezone != ActiveRecord.default_timezone && @timestamp_decoder
          decoder_class = ActiveRecord.default_timezone == :utc ?
            PG::TextDecoder::TimestampUtc :
            PG::TextDecoder::TimestampWithoutTimeZone

          # 将哈希转为关键字参数传递,消除弃用警告
          @timestamp_decoder = decoder_class.new(**@timestamp_decoder.to_h)
          @connection.type_map_for_results.add_coder(@timestamp_decoder)

          @default_timezone = ActiveRecord.default_timezone

          configure_connection
        end
      end
    end
  end
end

保存文件后重启服务,警告即可消除。这个补丁的核心是用**运算符把哈希展开为关键字参数,符合pg 1.5+的API要求。

  • 降级pg gem:临时把pg gem版本降到1.4.x,也能避开这个警告,但不推荐长期使用,会错过pg gem的后续更新。

内容的提问来源于stack exchange,提问作者alagaesia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 17:42:31