Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@syossan27
Created September 11, 2020 14:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save syossan27/57cff5342b647c4a740c135555056cc4 to your computer and use it in GitHub Desktop.
Save syossan27/57cff5342b647c4a740c135555056cc4 to your computer and use it in GitHub Desktop.
Spannerのテーブルから全レコード削除する君2
func deleteAllRowsByMultiPK(ctx context.Context, db *spanner.Client, tableName string, primaryFirstKeyName string, primarySecondKeyName string) {
var primaryKeys []*spanner.Mutation
stmt := spanner.Statement{SQL: "SELECT `" + primaryFirstKeyName + "`, `" + primarySecondKeyName + "` FROM `" + tableName + "`"}
iter := db.Single().Query(ctx, stmt)
defer iter.Stop()
for {
row, err := iter.Next()
if err == iterator.Done {
break
}
if err != nil {
panic(err)
}
var primaryFirstKey string
var primarySecondKey string
if err := row.Columns(&primaryFirstKey, &primarySecondKey); err != nil {
panic(err)
}
primaryKeys = append(primaryKeys,
spanner.Delete(tableName, spanner.Key{primaryFirstKey, primarySecondKey}),
)
}
var deleteMutations []*spanner.Mutation
for i, key := range primaryKeys {
deleteMutations = append(deleteMutations, key)
if i%1000 == 0 {
_, err := db.Apply(ctx, deleteMutations)
if err != nil {
panic(err)
}
deleteMutations = []*spanner.Mutation{}
}
}
if len(deleteMutations) != 0 {
_, err := db.Apply(ctx, deleteMutations)
if err != nil {
panic(err)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment