【问题标题】:rails ahoy gem - primary key id and autoincrement give duplicate entryrails ahoy gem - 主键 id 和自动增量给出重复条目
【发布时间】:2018-02-04 09:55:32
【问题描述】:

我在我的 rails 应用程序中遇到了一些关于访问模型的问题

我有很多

Mysql2::Error: Duplicate entry '$$' for key 'PRIMARY': INSERT INTO `visits`

$$ 是一个数字

当我打印最后一条记录时

Visits=Visit.find(:all, :order => "started_at desc", :limit => 5)
Visits.each do |visit| puts "#{visit.id} -- #{visit.started_at}" end

显示是

99904352 -- 2018-02-01 11:32:51 UTC

8918 -- 2018-02-01 09:59:04 UTC

90866 -- 2018-02-01 09:09:10 UTC

99904351 -- 2018-02-01 09:03:00 UTC

99904350 -- 2018-02-01 08:58:24 UTC

我已经尝试重置自动增量值

ALTER TABLE visits AUTO_INCREMENT = max_value+1;

没有成功..

有什么想法吗?我想避免转储/删除/重新加载数据库

谢谢!

【问题讨论】:

  • 什么是最大值? 99904352?你为什么不按id订购?也许有一个更大的。
  • order by id 没有显示问题,那是当时的最大值

标签: ruby-on-rails mysql2


【解决方案1】:

当你发现重复键错误,例如Mysql2::Error: Duplicate entry '$$' for key 'PRIMARY': INSERT INTO visits,你应该检查两件事:

  • 如果您手动插入记录并设置密钥
  • 如果自动增量值不是较大的键。

您当然必须更改程序以避免手动插入设置键的记录,并且您必须将自动增量值更新为下一个可用值。为此,请搜索最大值并将其设置为下一个值。

Select max(id) from visits;
ALTER TABLE visits AUTO_INCREMENT = max_value + 1;

【讨论】:

  • ahoy_matey gem 不需要指定id,其他模型ahoy::event 没有问题
【解决方案2】:

好的 我有一个错误的 before_create 尝试使用 uuid 而不是整数来设置 id .. 我已经评论了它.. 我必须等待,但我相信这是我的问题..

我的错:p

【讨论】:

  • 这导致了我的问题:S
猜你喜欢
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多