好的 - 我认为你的问题是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)
您可能想发布另一个问题来描述您要解决的问题,可能有不同的方法。