Postgresql 如何在cakephp和postgres数据库中执行行锁定?
我正在cakephp项目中使用postgres数据库。 我有一个包含一些数据的表和一个名为“status”的列。 “状态”是枚举,可以是“正在等待”、“正在进行”、“已完成” 我的脚本必须获取第一个找到的状态为等待的记录,将状态更改为“进行中”,并在一个原子过程中获取该记录和所有这些的id 计算后需要id将状态更改为“已完成”。 将有许多这样的脚本在Parralel中工作,这就是为什么我需要这个简单的“行锁定” 我是第一次使用postgres db——有什么简单的方法可以做到这一点吗?Postgresql 如何在cakephp和postgres数据库中执行行锁定?,postgresql,cakephp,cakephp-2.0,Postgresql,Cakephp,Cakephp 2.0,我正在cakephp项目中使用postgres数据库。 我有一个包含一些数据的表和一个名为“status”的列。 “状态”是枚举,可以是“正在等待”、“正在进行”、“已完成” 我的脚本必须获取第一个找到的状态为等待的记录,将状态更改为“进行中”,并在一个原子过程中获取该记录和所有这些的id 计算后需要id将状态更改为“已完成”。 将有许多这样的脚本在Parralel中工作,这就是为什么我需要这个简单的“行锁定” 我是第一次使用postgres db——有什么简单的方法可以做到这一点吗? 也许ca
也许cake支持一些方便的方法来实现这一点?使用cakePHP,它与您拥有的数据库类型没有区别,只需使用
$this->Model->find…
修改您的状态,然后“$this->Model->save…”`
$row = $this->Model->find('first',array('conditions' => array('Model.status' => 'waiting')));
$row['Model']['status'] = 'in progress';
$this->Model->save($row);
(...do something...)
$row['Model']['status'] = 'completed';
$this->Model->save($row);
您可能希望在循环中运行它,并将某种常量作为状态…lern关于事务如果状态更改期间有任何操作,冲突仍然存在。比方说,两个请求进程有很小的延迟,后一个在前一个保存状态之前获得相同的记录。因此,如何确保通过一个过程就能找到记录。您所描述的情况将非常罕见。这种情况下的具体解决方案取决于您在进行中状态下所做的工作。0.1%的重复操作会影响您的结果吗?如果是这样,您可以尝试使用数据库锁、某种类型的MyCask锁、添加随机偏移来查找查询,甚至可以考虑多种不同的技术来解决您的问题……