我每天运行 ruby 脚本作业,用于将数据从一个表加载到另一个表,直到在源表中找到重复的键记录,因为该表没有约束。我的目标表拒绝了这些记录,因为目标表对列(head_date、center_id、site_url)有主键约束。我的程序刚刚停止并在命令行上显示以下错误。:-(
in `async_exec': PG::Error: ERROR: duplicate key value violates unique constraint "tst_data_pkey" (ActiveRecord::RecordNotUnique)
我可以期望源表有其他像这样的讨厌的记录。捕获此活动记录异常后,如何继续处理并移至下一条记录?
以下是我的更新/插入的代码:
class SiteSection < ActiveRecord::Base
SiteSection.establish_connection(
:adapter => 'postgresql',
:host => 'hoster-of-hosts.com',
:database => 'super-inven',
:username => 'user',
:password => 'pass'
)
self.table_name = 'master.target_tbl' # << insert into this table
end
conn.query("select * from source_tbl") do |row|
siteData = SiteSection.find_or_initialize_by_head_date_and_center_id_and_site_url(row[:date_c], row[:com_id], row[:site_link])
siteData[:head_date] = row[:date_c]
siteData[:center_id] = row[:com_id]
siteData[:site_url] = row[:site_link].nil? ? 'unknown' : row[:site_link]
siteData[:people_cnt] = row[:persons].nil? ? 0 : row[:persons]
siteData[:ips] = row[:ip_adds].nil? ? 0 : row[:ip_adds]
siteData.save
i = i+1
puts "finished: #{i}" if i % 10000 == 0
end
conn.close