package main import ( "context" "fmt" "math/rand" "time" "git.ksdemosapps.com/kylesoda/pgx-learning/internal/config" "git.ksdemosapps.com/kylesoda/pgx-learning/internal/models" "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgxpool" "github.com/sirupsen/logrus" ) func generateTasks(count int) []models.Task { tasks := make([]models.Task, count) for i := 1; i <= count; i++ { tasks[i-1] = models.Task{ Text: fmt.Sprintf("random task NÂș %v", i), Completed: rand.Float64() > 0.5, } } return tasks } func saveTasks(db *pgxpool.Pool, ctx context.Context, tasks []models.Task) error { start := time.Now() rowsCopied, err := db.CopyFrom( ctx, pgx.Identifier{"tasks"}, []string{"text", "completed"}, pgx.CopyFromSlice(len(tasks), func(i int) ([]any, error) { return []any{ (tasks)[i].Text, (tasks)[i].Completed, }, nil }), ) if err != nil { return fmt.Errorf("Error al realizar el CopyFrom: %w", err) } duration := time.Since(start) logrus.Infof("Se insertaron exitosamente %d registros en %v\n", rowsCopied, duration) return nil } func main() { logrus.SetFormatter(&logrus.TextFormatter{ FullTimestamp: true, TimestampFormat: time.StampMilli, }) logrus.Info("Starting seed process") ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) defer cancel() db, err := pgxpool.New(ctx, config.Db.Url) if err != nil { logrus.Fatalf("Unable to create connection pool: %v", err) } else { logrus.Info("Successfully connected to the database") } defer db.Close() count := 100000 logrus.Infof("Generando %d registros...\n", count) tasks := generateTasks(count) if err := saveTasks(db, ctx, tasks); err != nil { logrus.Fatalf("Unexpected error: %v", err) } else { logrus.Info("Database seed completed succesfully") } }