我每天運行ruby腳本作業來將數據從一個表加載到另一個表,直到源表中找到重複的鍵記錄爲止,因爲該表沒有約束。我的目標表拒絕了這些記錄,因爲目標表對列具有主鍵約束(head_date,center_id,site_url)。我的程序剛剛停止,並在命令行中顯示下面的錯誤。 :-(如何捕捉和忽略Ruby中的ActiveRecord :: RecordNotUnique異常
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
你確定它需要包含self.table_name ='master.target_tbl'嗎?這是爲什麼?我認爲它應該圍繞它實際插入的部分或siteData.save命令。請讓我知道邏輯,以便我能更好地理解..謝謝。 – Doublespeed 2013-03-13 04:07:35
是的,它會在'save'上得到提升。固定 – AdamT 2013-03-13 04:28:55