summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--internal/goprecords/db.go14
1 files changed, 13 insertions, 1 deletions
diff --git a/internal/goprecords/db.go b/internal/goprecords/db.go
index 3afe970..18fadf5 100644
--- a/internal/goprecords/db.go
+++ b/internal/goprecords/db.go
@@ -63,7 +63,15 @@ func ImportFromDir(ctx context.Context, db *sql.DB, statsDir string) error {
if err != nil {
return fmt.Errorf("read dir: %w", err)
}
- insert, err := db.PrepareContext(ctx, "INSERT INTO record (host, uptime_sec, boot_time, os, os_kernel_name, os_kernel_major) VALUES (?, ?, ?, ?, ?, ?)")
+
+ // Use a transaction for better performance with multiple inserts
+ tx, err := db.BeginTx(ctx, nil)
+ if err != nil {
+ return fmt.Errorf("begin transaction: %w", err)
+ }
+ defer tx.Rollback()
+
+ insert, err := tx.PrepareContext(ctx, "INSERT INTO record (host, uptime_sec, boot_time, os, os_kernel_name, os_kernel_major) VALUES (?, ?, ?, ?, ?, ?)")
if err != nil {
return fmt.Errorf("prepare insert: %w", err)
}
@@ -124,6 +132,10 @@ func ImportFromDir(ctx context.Context, db *sql.DB, statsDir string) error {
return fmt.Errorf("scan %s: %w", path, err)
}
}
+
+ if err := tx.Commit(); err != nil {
+ return fmt.Errorf("commit transaction: %w", err)
+ }
return nil
}