diff --git a/database/sql.go b/database/sql.go
index d907e7ba03837e8b0112b27ad59981740c06f034_ZGF0YWJhc2Uvc3FsLmdv..49ce5682db45f99f167507180ae7193384d7f189_ZGF0YWJhc2Uvc3FsLmdv 100644
--- a/database/sql.go
+++ b/database/sql.go
@@ -133,5 +133,11 @@
 
 // SQLUpsert generates a squirrel "upsert" statement
 func SQLUpsert(m Mapped) squirrel.InsertBuilder {
+	return SQLUpsertColumns(m, m.Columns(true), m.Columns(false))
+}
+
+func SQLUpsertColumns(
+	m Mapped, insertColumns []string, updateColumns []string,
+) squirrel.InsertBuilder {
 	updateSQL, updateArgs, err := squirrel.
 		Update(m.Table()).
@@ -136,6 +142,6 @@
 	updateSQL, updateArgs, err := squirrel.
 		Update(m.Table()).
-		SetMap(ValuesMap(m, m.Columns(false)...)).
+		SetMap(ValuesMap(m, updateColumns...)).
 		ToSql()
 	if err != nil {
 		panic(err)
@@ -147,7 +153,6 @@
 	}
 	suffix := "ON CONFLICT (" + m.PKeyColumn() + ") DO UPDATE SET " + updateParts[1]
 
-	allColumns := m.Columns(true)
 	q := squirrel.
 		Insert(m.Table()).
 		PlaceholderFormat(squirrel.Dollar).
@@ -151,8 +156,8 @@
 	q := squirrel.
 		Insert(m.Table()).
 		PlaceholderFormat(squirrel.Dollar).
-		Columns(allColumns...).
-		Values(m.Values(allColumns...)...).
+		Columns(insertColumns...).
+		Values(m.Values(insertColumns...)...).
 		Suffix(suffix, updateArgs...)
 	return q
 }
diff --git a/database/sql_helper.go b/database/sql_helper.go
index d907e7ba03837e8b0112b27ad59981740c06f034_ZGF0YWJhc2Uvc3FsX2hlbHBlci5nbw==..49ce5682db45f99f167507180ae7193384d7f189_ZGF0YWJhc2Uvc3FsX2hlbHBlci5nbw== 100644
--- a/database/sql_helper.go
+++ b/database/sql_helper.go
@@ -105,6 +105,17 @@
 	return nil
 }
 
+// Upsert upserts a Mapped into the db
+func (h *SQLHelper) UpsertColumns(insertColumns, updateColumns []string, instances ...Mapped) error {
+	for _, instance := range instances {
+		query := SQLUpsertColumns(instance, insertColumns, updateColumns)
+		if _, err := h.Exec(query); err != nil {
+			return err
+		}
+	}
+	return nil
+}
+
 // Update updates the given Mapped into the db using their
 // pkey as predicate for the where clause
 func (h *SQLHelper) Update(instances ...Mapped) error {