好的 - 我认为你的问题是PREPARE TRANSACTION不能做你认为的事情。
您将PREPARE作为事务中的最后一件事物,并将其保存起来,以便稍后再提交。它通常用于需要同时更新多个数据库的情况。您可以同时在两者上准备交易,然后在两者上执行COMMIT PREPARED(尽可能)。这可以减少出现问题时的窗口,并让一个数据库与另一个数据库不一致。
=> 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)
您可能需要发布另一个问题来描述您尝试解决的问题,可能会有不同的方法。
是不是应该是一个PREPARE ... AS语句或PREPARE TRANSACTION ...语句?我猜测第二个,但是我看不到更新/插入应该播放什么部分。 – 2013-02-19 20:11:01
是一个PREPARE TRANSACTION语句。更新/插入对数据做了一些修改,我需要在调用commit/rollback之前知道这些修改。这回答你的问题? – 2013-02-19 22:36:51
不,您可以随时查看您在自己的交易中所做的更改。你能提供一个你想要做什么和出现什么问题的实例吗? – 2013-02-20 08:27:50