Skip to content

Commit 1076449

Browse files
authored
Merge pull request #321 from akrherz/gh316
🎨 Use upsert approach to workaround #316
2 parents 0780af3 + 9f82a2e commit 1076449

File tree

1 file changed

+27
-4
lines changed

1 file changed

+27
-4
lines changed

src/pywwa/workflows/shef.py

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)