Open6
Go ORM Knowledge
dbr
execは成功してるけど、DBに値が入らんとき。
tx.Commit()ができてない(可能性が大)
(失敗)
[2021-06-21T11:00:39.8453421Z]: job:general event:dbr.begin
[2021-06-21T11:00:39.8467721Z]: job:general event:dbr.exec time:1197 μs kvs:[sql:INSERT INTO `t_invoice` (`id`,`client_id`,`tax_excluded`,`tax_rate`,`service`,`target_month`,`created_at`) VALUES (0,2,1000,10,'stripe','2021-07','2021-06-21 11:00:39.837848')]
(成功)
[2021-06-21T11:07:51.3444854Z]: job:general event:dbr.exec time:1285 μs kvs:[sql:INSERT INTO `t_invoice` (`id`,`client_id`,`tax_excluded`,`tax_rate`,`service`,`target_month`,`created_at`) VALUES (0,2,1000,10,'stripe','2021-07','2021-06-21 11:07:51.341642')]
[2021-06-21T11:07:51.3463542Z]: job:general event:dbr.commit
DynamoDB × Go
dynamodbav というタグを利用することで、DynamoDBのキーを指定して構造体とマッピングすることができます。
省略した場合は構造体のキー名がそのまま利用されます。
想定外のエラーの際
想定外のエラーでlogが不十分な際はdebug用のlogが埋め込めるか確認する。
「これやったらいけるかな?」は2回まで。それ以上はやらない。
きちんとlog埋めて、logの結果見て原因を突き止めること!!
gorm
のLogMode(true)にしたら一発で原因が分かった。
db.LogMode(true)
GormでINを使う時
string
の slice
型をIN句で使うときは ?
の部分を括弧で括ってあげないと、SQL構文エラーになる。
エラー文
[2021-10-17 08:00:06] Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?,?,?,?,?,?,?)' at line 1
(/app/infra/mysql/t_works.go:21)
[2021-10-17 08:00:06] [0.50ms] SELECT * FROM `t_works` WHERE (uuid IN 'ayT26n5uOBJVRS','RbfnBB3DQQrVXbQns1','dCaElk4mrpjph6rx2','8nKhTk9dFI5A','1EkmFP2imIso23','vGrj5RVqw3EoeF7vSGg','ygx8ffvUsywB4Vy')
[0 rows affected or returned ]
対応策:?を括弧で囲む
func FetchWorksByUUIDs(uuids []string) ([]models.Work, error) {
// 中略
db.Where("uuid IN (?)", uuids).Find(&works)
}
gorm で transaction 管理