Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何在cakephp和postgres数据库中执行行锁定?_Postgresql_Cakephp_Cakephp 2.0 - Fatal编程技术网

Postgresql 如何在cakephp和postgres数据库中执行行锁定?

Postgresql 如何在cakephp和postgres数据库中执行行锁定?,postgresql,cakephp,cakephp-2.0,Postgresql,Cakephp,Cakephp 2.0,我正在cakephp项目中使用postgres数据库。 我有一个包含一些数据的表和一个名为“status”的列。 “状态”是枚举,可以是“正在等待”、“正在进行”、“已完成” 我的脚本必须获取第一个找到的状态为等待的记录,将状态更改为“进行中”,并在一个原子过程中获取该记录和所有这些的id 计算后需要id将状态更改为“已完成”。 将有许多这样的脚本在Parralel中工作,这就是为什么我需要这个简单的“行锁定” 我是第一次使用postgres db——有什么简单的方法可以做到这一点吗? 也许ca

我正在cakephp项目中使用postgres数据库。 我有一个包含一些数据的表和一个名为“status”的列。 “状态”是枚举,可以是“正在等待”、“正在进行”、“已完成”

我的脚本必须获取第一个找到的状态为等待的记录,将状态更改为“进行中”,并在一个原子过程中获取该记录和所有这些的id

计算后需要id将状态更改为“已完成”。 将有许多这样的脚本在Parralel中工作,这就是为什么我需要这个简单的“行锁定”

我是第一次使用postgres db——有什么简单的方法可以做到这一点吗?
也许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锁、添加随机偏移来查找查询,甚至可以考虑多种不同的技术来解决您的问题……