72 lines
1.9 KiB
Go
72 lines
1.9 KiB
Go
//go:build ignore
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"doormile/config"
|
|
"doormile/db"
|
|
|
|
"github.com/joho/godotenv"
|
|
)
|
|
|
|
func main() {
|
|
_ = godotenv.Load()
|
|
cfg := config.Load()
|
|
db.Connect(cfg)
|
|
if db.DB == nil {
|
|
log.Fatal("no DB")
|
|
}
|
|
|
|
fmt.Println("=== unique constraints on bookingno / trackingno ===")
|
|
type c struct{ Conname, Def string }
|
|
var cs []c
|
|
db.DB.Raw(`SELECT c.conname, pg_get_constraintdef(c.oid) def
|
|
FROM pg_constraint c JOIN pg_class t ON t.oid=c.conrelid
|
|
WHERE t.relname IN ('pickupbookings','consignments') AND c.contype='u'`).Scan(&cs)
|
|
if len(cs) == 0 {
|
|
fmt.Println(" NONE — nothing stops a duplicate at the database level")
|
|
}
|
|
for _, x := range cs {
|
|
fmt.Printf(" %s: %s\n", x.Conname, x.Def)
|
|
}
|
|
|
|
fmt.Println("\n=== duplicate booking numbers ===")
|
|
type d struct {
|
|
Bookingno string
|
|
N int64
|
|
}
|
|
var ds []d
|
|
db.DB.Raw(`SELECT bookingno, count(*) n FROM pickupbookings
|
|
GROUP BY 1 HAVING count(*)>1 ORDER BY n DESC LIMIT 10`).Scan(&ds)
|
|
fmt.Printf(" %d duplicated\n", len(ds))
|
|
for _, x := range ds {
|
|
fmt.Printf(" %s x%d\n", x.Bookingno, x.N)
|
|
}
|
|
|
|
fmt.Println("\n=== all-zero random part (would mean rand.Read failed) ===")
|
|
var zeros int64
|
|
db.DB.Raw(`SELECT count(*) FROM pickupbookings WHERE bookingno LIKE 'DM-BK-00000000-%'`).Scan(&zeros)
|
|
fmt.Printf(" %d\n", zeros)
|
|
|
|
fmt.Println("\n=== how many bookings share a timestamp suffix ===")
|
|
type s struct {
|
|
Suffix string
|
|
N int64
|
|
}
|
|
var ss []s
|
|
db.DB.Raw(`SELECT split_part(bookingno,'-',4) suffix, count(*) n
|
|
FROM pickupbookings GROUP BY 1 ORDER BY n DESC LIMIT 5`).Scan(&ss)
|
|
for _, x := range ss {
|
|
fmt.Printf(" suffix %-8s %d bookings\n", x.Suffix, x.N)
|
|
}
|
|
|
|
fmt.Println("\n=== duplicate tracking numbers ===")
|
|
var td []d
|
|
db.DB.Raw(`SELECT trackingno bookingno, count(*) n FROM consignments
|
|
GROUP BY 1 HAVING count(*)>1 LIMIT 5`).Scan(&td)
|
|
fmt.Printf(" %d duplicated\n", len(td))
|
|
}
|