topfans/backend/scripts/loadgen/seed/sequences.go

53 lines
1.5 KiB
Go

package main
import (
"database/sql"
"fmt"
)
var loadtestSeqs = map[string]string{
"users": "users_id_seq",
"fan_profiles": "fan_profiles_id_seq",
"assets": "assets_id_seq",
"booth_slots": "booth_slots_slot_id_seq",
"exhibitions": "exhibitions_id_seq",
"stars": "stars_star_id_seq",
"asset_likes": "asset_likes_id_seq",
"friendships": "friendships_id_seq",
"crystal_transaction_records": "crystal_transaction_records_id_seq",
}
var pkColumns = map[string]string{
"users": "id",
"fan_profiles": "id",
"assets": "id",
"booth_slots": "slot_id",
"exhibitions": "id",
"stars": "star_id",
"asset_likes": "id",
"friendships": "id",
"crystal_transaction_records": "id",
}
func ResetSequences(db *sql.DB) error {
for tbl, seq := range loadtestSeqs {
pk := pkColumns[tbl]
if pk == "" {
pk = "id"
}
var maxID sql.NullInt64
if err := db.QueryRow(fmt.Sprintf("SELECT MAX(%s) FROM %s", pk, tbl)).Scan(&maxID); err != nil {
fmt.Printf(" skip %s: %v\n", tbl, err)
continue
}
if !maxID.Valid {
continue
}
if _, err := db.Exec(fmt.Sprintf("SELECT setval('%s', $1)", seq), maxID.Int64); err != nil {
return fmt.Errorf("setval %s: %w", seq, err)
}
fmt.Printf(" ✓ %s → %d\n", seq, maxID.Int64)
}
return nil
}