diff options
| -rw-r--r-- | internal/goprecords/db.go | 14 |
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 } |
