如何控制postgres数据库表

时间:2017-03-06 07:04:17

标签: postgresql

我在postgres中有一个数据库表,用于为公司生成收据号。该表有一个名为receipt_number的列,当在post之后记录一行时插入,我所做的就是检查最后一个receipt_number并增加它通过1得到下一个收据号码,问题是,当说两个客户同时付款时,有两行记录,但他们有相同的收据号,否则一切都很好。

了解这是什么原因......只有当多个客户同时付款时才会发生这种情况。

提前致谢

1 个答案:

答案 0 :(得分:0)

这是由于并发访问。当事件同时发生两次时,两个实例在保存另一个实例之前获得最大值,因此最大值相同。可能的解决方案是创建列serial。如果这不是一个选项,那么您可以在服务器端拥有一个事件队列,每当您打算添加新记录而不是插入它时,您可以将它们添加到队列中。另一方面,cron作业或心跳作业可以定期检查队列,如果它不为空,则按顺序执行命令。