【发布时间】:2014-09-03 09:56:33
【问题描述】:
我们已经实现了一个数据库开始/提交/回滚系统,您可以在任何地方的代码中开始/提交,如果在特定位置执行开始/提交时,您就在另一个开始/提交块中,那么它只会在您回到开始的第一级时进行提交。这是使用静态变量完成的,该变量只记录您所在的开始/提交块级别。每次遇到开始时,如果计数器为 1,则将 BEGIN 发送到数据库并递增计数器。如果计数器大于一,则只增加计数器。同样,如果请求提交,则计数器会递减,并且只有在计数器为 1 的情况下,才会向数据库发送真正的 COMMIT 命令。
首先,对这种方式有什么想法吗?长期以来,这对我们来说非常有效。但是,我们现在遇到了一种情况,无论我们在开始/提交级别方面处于什么位置,我们都需要将一些数据保存到数据库中。
人们一般如何处理这个问题?另外对我们处理多级开始/提交的方式有何想法?
顺便说一句,我们在 PHP 中使用 postgres 数据库进行此操作。
谢谢 齐亚德
【问题讨论】:
-
您最好的选择是创建一个单独的事务(或连接,取决于实现)来运行您希望保证的插入。
-
您不能在单个连接/事务中执行此操作。对于嵌入式事务,请参阅
SAVEPOINTs postgresql.org/docs/current/static/sql-savepoint.html -
这个功能通常被称为“自治事务”,在 PostgreSQL 中不存在。解决方法始终是打开一个新连接。考虑用于服务器端实现的 dblink 模块。
标签: php database postgresql