0

在提交/回滚之前,我无法在准备好的语句中访问修改后的数据(更新和插入)。例如考虑以下块:

BEGIN;    
do some update;   
do some insert;    
PREPARE 'transaction1';

在执行“prepare”命令之后(以及在执行“commit”命令之前),我需要获取事务“transaction1”修改的数据。我可以使用事务修改的旧值获取行(使用 xmax 字段),但是我还需要事务在提交时将写入这些行的值。

Postgres 需要将这些值存储在某处以便在需要时提交事务,所以我的问题是:如何访问这些值?

4

2 回答 2

1

谢谢理查德,你是对的。我无法获取“准备好的”交易的修改。我所做的解决方法是在调用 PREPARE 语句之前获取事务中化的值。

    BEGIN;
    execute my_stored_procedure;
    fetch modified rows;
    PREPARE TRANSACTION my_stored_procedure;'

皮尔保罗

于 2013-02-21T11:24:07.470 回答
0

好的 - 我认为你的问题是PREPARE TRANSACTION没有做你认为它做的事情。

您将 PREPARE 作为事务中的最后一件事并将其保存,以便您稍后提交。它通常用于需要同时更新多个数据库的情况。您将在两者上准备交易,然后同时在两者上提交准备(尽可能)。这会减少可能发生问题的窗口,并让一个数据库与另一个数据库脱节。

=> BEGIN;
BEGIN
richardh=> SELECT * FROM foo;
 app_id | rule_id
--------+---------
      1 |      10
      1 |      20
      2 |      10
(3 rows)

=> INSERT INTO foo VALUES (3,30);
INSERT 0 1
=> PREPARE TRANSACTION 'abc';
PREPARE TRANSACTION
=> SELECT * FROM foo;
 app_id | rule_id
--------+---------
      1 |      10
      1 |      20
      2 |      10
(3 rows)

=> COMMIT PREPARED 'abc';
COMMIT PREPARED
=> SELECT * FROM foo;
 app_id | rule_id
--------+---------
      1 |      10
      1 |      20
      2 |      10
      3 |      30
(4 rows)

您可能想发布另一个问题来描述您要解决的问题,可能有不同的方法。

于 2013-02-20T13:01:33.283 回答