-1

PostgreSQL的9.5,Rails的4.2.4,红宝石2.3.0补丁或更新外键(ID)在现有的Rails PostgreSQL表

简装的downvote(太罗嗦?)

我试着使用activerecord-import等,同时批量导入数据和尊重关联并避免重复 - 无济于事。因此,我想知道导入后是否可以执行,而不是仅在现有记录中进行关联。

中心问题:有没有办法在表中引入junky,链接到无处的外键(foreigntable_id),并使用关联表的原始主键(id)更新/替换它们?

UPDATE:d'oh,可以通过调整Rails'update_all生成的SQL来找到。

回答

0

因此,Rails的Model.update_all(id: ...)方法为更新外键(或任何列)的方式提供了一些很好的线索(不知道是否更好的方法)。如果我们有一个投资模型,并表investorshas_manytransactionstransactionsbelongs_toinvestors,并investors表具有唯一name是一样的,也就是说,transactionsinv_name

UPDATE transactions 
SET investor_id = (SELECT investors.id FROM investors 
        WHERE investors.name = transactions.inv_name) 
WHERE transactions.id IN (SELECT transactions.id FROM transactions)