@@ -277,6 +277,7 @@ func newTransactor(
277
277
if d .load .conn , err = pgx .Connect (ctx , cfg .ToURI ()); err != nil {
278
278
return nil , nil , fmt .Errorf ("load pgx.Connect: %w" , err )
279
279
}
280
+
280
281
if d .store .conn , err = pgx .Connect (ctx , cfg .ToURI ()); err != nil {
281
282
return nil , nil , fmt .Errorf ("store pgx.Connect: %w" , err )
282
283
}
@@ -290,6 +291,11 @@ func newTransactor(
290
291
}
291
292
292
293
for _ , binding := range bindings {
294
+ // Make sure that the binding does not exist before creating it.
295
+ if err = d .removeBinding (ctx , binding ); err != nil {
296
+ return nil , nil , fmt .Errorf ("remove binding: %w" , err )
297
+ }
298
+
293
299
if err = d .addBinding (ctx , binding , is ); err != nil {
294
300
return nil , nil , fmt .Errorf ("addBinding of %s: %w" , binding .Path , err )
295
301
}
@@ -318,6 +324,18 @@ type binding struct {
318
324
loadQuerySQL string
319
325
}
320
326
327
+ func (t * transactor ) removeBinding (ctx context.Context , target sql.Table ) error {
328
+ var b = & binding {target : target }
329
+ var w strings.Builder
330
+
331
+ if err := tplDropLoadTable .Execute (& w , & b .target ); err != nil {
332
+ return fmt .Errorf ("executing dropLoadTable template: %w" , err )
333
+ } else if _ , err := t .load .conn .Exec (ctx , w .String ()); err != nil {
334
+ return fmt .Errorf ("Exec(%s): %w" , w .String (), err )
335
+ }
336
+ return nil
337
+ }
338
+
321
339
func (t * transactor ) addBinding (ctx context.Context , target sql.Table , is * boilerplate.InfoSchema ) error {
322
340
var b = & binding {target : target }
323
341
@@ -519,6 +537,13 @@ func (d *transactor) Store(it *m.StoreIterator) (_ m.StartCommitFunc, err error)
519
537
}
520
538
521
539
func (d * transactor ) Destroy () {
540
+ for _ , b := range d .bindings {
541
+ err := d .removeBinding (context .Background (), b .target )
542
+ if err != nil {
543
+ return
544
+ }
545
+ }
546
+
522
547
d .load .conn .Close (context .Background ())
523
548
d .store .conn .Close (context .Background ())
524
549
}
0 commit comments