Open yasulab opened 6 years ago
@yasulab
ID指定してレコードを作るとシーケンスが上がらないみたいですね。
既に作成済みのDBに対して$ dojos:update_db_by_yaml
を実行しているという状況でしょうか?
@nalabjp
既に作成済みのDBに対して$ dojos:update_db_by_yamlを実行しているという状況でしょうか?
ですね! 本番環境のDBを $ heroku pg:pull DATABASE_URL coderdojo_jp_development --app coderdojo-japan
で取得してから実行しています! 📥 ☁️
MySQLだとTruncateでリセットされるはずですがPostgreSQLだとされなかったりするようですね
SELECT setval('dojos_id_seq', coalesce((SELECT MAX(id)+1 FROM dojos), 1), false);
みたいなのをdojos:update_db_by_yaml
タスクで実行するようにするっぽいですね🤔(要動作確認)
ref:
https://www.postgresql.jp/document/10/html/functions-sequence.html
SELECT setval('dojos_id_seq', coalesce((SELECT MAX(id)+1 FROM dojos), 1), false);
あー、なるほど! ではこちらをタスク内に実装すれば解決できそうですね...!! 早速のコメントありがとうございます! 😍
@nalabjp もしご存知だったら伺いたいんですが、coderdojo.jp を clone して Heroku から DB を pull した状態で
$ dojos:update_db_by_yaml
を実行すると次のようなエラーが出てくるようになるんですよね🤔 (なんでだろう...?)一応ワークアラウンドな対応としては、ひたすら
$ dojos:update_db_by_yaml
を実行すればそのうち already exists ではない Key に至るので、適当に成功するまでwhile : ; do i=$((i+1)) ; be rails dojos:update_db_by_yaml ; done
を実行していたりします 😅.oO(ID のイテレータの初期値がおかしいのかなぁ)