@@ -275,11 +275,34 @@ def save_current() -> int:
275275 LOG .info ("Got varname of '%s' somehow? %s" , varname , mydict )
276276 continue
277277
278+ # database unique on
279+ # (station, physical_code, duration, source, type, extremum,
280+ # probability, depth, qualifier, unit_convention)
278281 d2 = CTX ["ACCESSDB" ].runOperation (
279- "INSERT into current_shef(station, valid, physical_code, "
280- "duration, source, type, extremum, probability, value, depth, "
281- "dv_interval, unit_convention, qualifier, product_id) "
282- "values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)" ,
282+ """
283+ INSERT into current_shef(station, valid, physical_code,
284+ duration, source, type, extremum, probability, value, depth,
285+ dv_interval, unit_convention, qualifier, product_id)
286+ values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)
287+ ON CONFLICT (station, physical_code, duration, source, type, extremum,
288+ probability, depth, qualifier, unit_convention) do update
289+ set
290+ valid = EXCLUDED.valid, value = EXCLUDED.value,
291+ product_id = EXCLUDED.product_id, dv_interval = EXCLUDED.dv_interval
292+ where
293+ current_shef.station = EXCLUDED.station and
294+ current_shef.physical_code = EXCLUDED.physical_code and
295+ current_shef.duration = EXCLUDED.duration and
296+ current_shef.source = EXCLUDED.source and
297+ current_shef.type = EXCLUDED.type and
298+ current_shef.extremum = EXCLUDED.extremum and
299+ current_shef.probability is not distinct from EXCLUDED.probability and
300+ current_shef.depth is not distinct from EXCLUDED.depth and
301+ current_shef.qualifier is not distinct from EXCLUDED.qualifier and
302+ current_shef.unit_convention is not distinct from EXCLUDED.unit_convention
303+ and current_shef.valid <= EXCLUDED.valid
304+
305+ """ ,
283306 (
284307 sid ,
285308 mydict ["valid" ],
0 commit comments