ruby-on-rails – 我的用户表中是否正常/建议使用“id hole”(ra
我正在Heroku上构建一个基本的Rails应用程序(使用
postgresql和db客户端PGAdmin)
我有一个基本的用户表,名称,电子邮件,密码…… 我注意到当我删除一个用户(例如id = 6的用户)然后我添加新用户时,新用户没有插入id = 6(我说的是左边的第一列调用pgadmin“id PK Serial”)所以基本上我有很多漏洞,因为在我的训练中我经常删除并添加用户. 所以我最终得到了id列:id = 1,id = 5,id = 9 id = 10 ……很多洞. 有关系吗?它可能会影响我以后需要做的db请求吗? 如果我需要更正并强制db“填充”所有id插槽,我应该怎么做? 解决方法
在表标识序列中有“漏洞”是绝对正常的 – 即使您从未删除过一行.我写了更多关于这个
in this earlier answer的内容.
根据设计,PostgreSQL序列不受正常事务规则的约束.如果它们不是那么一次只有一个事务可以获取一个ID,那么你一次就不能有多个会话插入一个表.这将导致悲惨的表现. 这在the PostgreSQL manual on the
从理论上讲,PostgreSQL可以维护已删除,已弃用和未使用的ID列表,但实际上,这在性能方面非常昂贵 – 并且极难实现.一旦应用程序获得了nextval的id,它就可以在将来的任何时候使用它,并且一些应用程序使用这种方法,缓存ID块以获得更好的内部并发性. 将生成的ID视为唯一的行号 – 这就是全部.它没有告诉你有多少行.它不会告诉您是否在另一行之后插入了一行(您可以使用created_time时间戳,可能由触发器维护).它不会告诉您是否在另一行之后提交了一行(系统xmin columm告诉您,具有某些限制).它告诉你的是如何找到行. 看到: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |