上的可序列化的隔離違規我有一個非常大的Redshift數據庫,其中包含數十億行HTTP請求數據。Redshift:表
我有一個表稱爲requests
其中有幾個重要的領域:
ip_address
city
state
country
我每運行一次Python進程這一天抓住了所有的d仍然沒有進行地理編碼的行(還沒有任何城市/州/國家信息),然後嘗試通過Google的Geocoding API對每個IP地址進行地理編碼。
這個過程(僞)看起來是這樣的:
for ip_address in ips_to_geocode:
country, state, city = geocode_ip_address(ip_address)
execute_transaction('''
UPDATE requests
SET ip_country = %s, ip_state = %s, ip_city = %s
WHERE ip_address = %s
''')
運行此代碼,我經常會收到這樣的錯誤如下:
psycopg2.InternalError: 1023
DETAIL: Serializable isolation violation on table - 108263, transactions forming the cycle are: 647671, 647682 (pid:23880)
我假設這是因爲我有其他進程不斷記錄HTTP請求到我的表中,所以當我嘗試執行我的UPDATE語句時,它無法選擇所有行與我想要更新的IP地址。
我的問題是:我能做些什麼來以一種理智的方式更新這些記錄,以便定期停止失敗?