diff pkg/imports/wa.go @ 2659:00b0a7b2225a

Waterway area import: do not fail if INSERT of one item fails
author Tom Gottfried <tom@intevation.de>
date Thu, 14 Mar 2019 18:09:35 +0100
parents 9b6a02923bb4
children 542d3441c2d8
line wrap: on
line diff
--- a/pkg/imports/wa.go	Thu Mar 14 16:59:14 2019 +0100
+++ b/pkg/imports/wa.go	Thu Mar 14 18:09:35 2019 +0100
@@ -197,6 +197,8 @@
 
 		feedback.Info("Using EPSG: %d", epsg)
 
+		const featureSavepoint = "feature"
+
 		for _, feature := range rfc.Features {
 			if feature.Properties == nil || feature.Geometry.Coordinates == nil {
 				missingProperties++
@@ -229,6 +231,9 @@
 				if err := json.Unmarshal(*feature.Geometry.Coordinates, &p); err != nil {
 					return err
 				}
+				if err := Savepoint(tx, ctx, featureSavepoint); err != nil {
+					return err
+				}
 				if _, err := insertStmt.ExecContext(
 					ctx,
 					p.asWKB(),
@@ -236,9 +241,16 @@
 					catccl,
 					dirimp,
 				); err != nil {
-					return err
+					feedback.Warn(handleError(err).Error())
+					if err = RollbackToSavepoint(tx, ctx, featureSavepoint); err != nil {
+						return err
+					}
+				} else {
+					if err = ReleaseSavepoint(tx, ctx, featureSavepoint); err != nil {
+						return err
+					}
+					features++
 				}
-				features++
 			default:
 				unsupported[feature.Geometry.Type]++
 			}