【发布时间】:2019-01-03 07:21:59
【问题描述】:
我正在使用 postgresql。我必须在 php 脚本中调用一个 jar 文件,该文件在读取 db 后执行一些操作。
$connection 是一个 PDO。我注意到以下行为:
场景 1:
$connection->commit();
exec_shell(java -jar jarname) //it does not give expected behaviour
场景 2:
$connection->commit();
sleep(60);
exec_shell(java -jar jarname) //it does give expected behaviour
那么,问题来了:如何等到 commit 将所有数据写入磁盘后再继续执行指令?
fsync 在 postgres.conf 中开启 synchronous_commit 在 postgres.conf 中开启
【问题讨论】:
-
您可以查看文件是否被其他进程锁定。您可以有一个 while 循环来查看文件的最后修改日期。您可以扫描文件以查找文件结束标记。
-
@Scuzzy 似乎不是这里问题的 java 文件的锁定,但是 PDO::commit 在运行 java 文件之前没有将所有数据写入表。如果我理解 OP 正确。
-
也许你应该修改你的java prog到Consistent Nonlocking Reads
标签: php pdo transactions commit disk