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

Rails迁移为Postgres的Users表jsonb列回填默认值

Rails 4.2.11 + PostgreSQL:为旧用户jsonb列回填"A":0并保留原有数据

解决方案步骤:

  1. 生成迁移文件
    在终端执行以下命令创建专门处理数据回填的迁移:

    rails generate migration AddAToUsersConfigs
    
  2. 编写迁移逻辑
    打开生成的迁移文件(路径为db/migrate/[timestamp]_add_a_to_users_configs.rb),替换默认内容为以下代码:

    class AddAToUsersConfigs < ActiveRecord::Migration
      def up
        # 为configs中不存在"A"键的旧用户添加"A":0,保留原有B/C/D值
        execute <<-SQL
          UPDATE users
          SET configs = configs || '{"A": 0}'::jsonb
          WHERE configs ? 'A' = false;
        SQL
      end
    
      def down
        # 回滚操作:移除configs中的"A"键
        execute <<-SQL
          UPDATE users
          SET configs = configs - '{"A"}'::text[]
          WHERE configs ? 'A' = true;
        SQL
      end
    end
    

关键逻辑说明:

  • configs || '{"A": 0}'::jsonb:PostgreSQL的jsonb合并操作,会将新键值对添加到原有jsonb对象中,不会覆盖已存在的B/C/D键值。
  • WHERE configs ? 'A' = false:仅对未包含"A"键的用户执行更新,避免重复操作、提升执行效率。
  • 回滚逻辑:使用configs - '{"A"}'::text[]移除指定键,确保迁移具备可回滚能力。

注意事项:

  • 执行迁移前请备份数据库,并优先在测试环境验证效果。
  • 若用户量较大,建议在业务低峰时段执行操作,避免影响正常业务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:35:13