| @@ -35,5 +35,37 @@ func LoadFixtures() error { | |||||
| if err != nil { | if err != nil { | ||||
| fmt.Printf("LoadFixtures failed after retries: %v\n", err) | fmt.Printf("LoadFixtures failed after retries: %v\n", err) | ||||
| } | } | ||||
| // Now if we're running postgres we need to tell it to update the sequences | |||||
| if x.Dialect().DriverName() == "postgres" { | |||||
| results, err := x.QueryString(`SELECT 'SELECT SETVAL(' || | |||||
| quote_literal(quote_ident(PGT.schemaname) || '.' || quote_ident(S.relname)) || | |||||
| ', COALESCE(MAX(' ||quote_ident(C.attname)|| '), 1) ) FROM ' || | |||||
| quote_ident(PGT.schemaname)|| '.'||quote_ident(T.relname)|| ';' | |||||
| FROM pg_class AS S, | |||||
| pg_depend AS D, | |||||
| pg_class AS T, | |||||
| pg_attribute AS C, | |||||
| pg_tables AS PGT | |||||
| WHERE S.relkind = 'S' | |||||
| AND S.oid = D.objid | |||||
| AND D.refobjid = T.oid | |||||
| AND D.refobjid = C.attrelid | |||||
| AND D.refobjsubid = C.attnum | |||||
| AND T.relname = PGT.tablename | |||||
| ORDER BY S.relname;`) | |||||
| if err != nil { | |||||
| fmt.Printf("Failed to generate sequence update: %v\n", err) | |||||
| return err | |||||
| } | |||||
| for _, r := range results { | |||||
| for _, value := range r { | |||||
| _, err = x.Exec(value) | |||||
| if err != nil { | |||||
| fmt.Printf("Failed to update sequence: %s Error: %v\n", value, err) | |||||
| return err | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| return err | return err | ||||
| } | } | ||||