我有一个问题是在提交/回滚之前在预准备语句中访问修改后的数据(更新和插入)。例如,考虑以下块:
BEGIN;
do some update;
do some insert;
PREPARE 'transaction1';
执行'prepare'命令后(以及执行'commit'命令之前),我需要获取事务'transaction1'修改的数据。我可以使用事务修改的旧值(使用xmax字段)获取行,但是我还需要事务在提交时写入这些行的值。
Postgres需要将这些值存储在某个地方,以便在需要时提交事务,所以我的问题是:如何访问这些值?
答案 0 :(得分:1)
BEGIN;
execute my_stored_procedure;
fetch modified rows;
PREPARE TRANSACTION my_stored_procedure;'
主席Pierpaolo
答案 1 :(得分:0)
好的 - 我认为您的问题是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)
您可能希望发布另一个问题来描述您要解决的问题,可能会有不同的方法。