首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails -数据库分片

rails -数据库分片
EN

Stack Overflow用户
提问于 2013-01-17 19:07:00
回答 1查看 481关注 0票数 0

我有下面这段代码,它将数据从数据库A中的映像表(shard_A)复制到数据库B中的另一个表(shard_B)

下面是两个数据库中的image表的结构

代码语言:javascript
复制
Image table (shard_A)   -   Image table (shard_B)
- image_id              -   image_id 
- submission_fk         -   sub_fk 
- image_desc            -   img_desc

两个表的列名略有不同

代码语言:javascript
复制
  @test_shard_A = Image.using(:shard_A).find(:first, :conditions => ["submission_fk =?", @sub.id ])

  Octopus.using(:shard_B) do

    Image.create(
    :image_id => @test_shard_A.image_id,
    :sub_fk => @test_shard_A.submission_fk,
    :img_desc => @test_shard_A.image_desc
    ) do |primary|
    primary.img_id = @test_shard_A.image_id
    end

  end

上面给出了以下错误消息:

代码语言:javascript
复制
unknown attribute: sub_fk

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-17 19:15:19

当对表执行第一次查询时,ActiveRecord加载元数据(表信息)。当您使用对shard_A的查询启动应用程序时,它会检查表结构,并使用submission_fk根据表结构构造Image类。

当您更改分片时,它不会再次检查表结构,因此它假定有一个submission_fk,并且假定没有sub_fk,因为它不知道这一点。

我建议你对所有的分片使用相同的结构,但如果你不能做到这一点,你可能会强制ActiveRecord到reload the table information -我从未使用过Octopus,但我认为它会起作用:

代码语言:javascript
复制
Image.reset_column_information

请注意,这会降低应用程序的性能,因为重新加载元数据是一个很慢的操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14377703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档