SAVEPOINT — 在目前的交易中定義一個新的儲存點
SAVEPOINT savepoint_name
SAVEPOINT
在目前的交易中建立一個新的儲存點。
儲存點是交易內部的一個特殊標記,允許回滾在建立後執行的所有指令,將交易狀態恢復到儲存點建立時的狀態。
savepoint_name
賦予新儲存點的名稱。如果已經存在具有相同名稱的儲存點,它們將無法存取,直到釋放更新的具有相同名稱的儲存點。
建立一個儲存點,然後撤銷在建立後執行的所有指令的效果
BEGIN; INSERT INTO table1 VALUES (1); SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (2); ROLLBACK TO SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (3); COMMIT;
上述交易將插入值 1 和 3,但不插入 2。
建立和隨後銷毀儲存點
BEGIN; INSERT INTO table1 VALUES (3); SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (4); RELEASE SAVEPOINT my_savepoint; COMMIT;
上述交易將插入 3 和 4。
使用單一儲存點名稱
BEGIN; INSERT INTO table1 VALUES (1); SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (2); SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (3); -- rollback to the second savepoint ROLLBACK TO SAVEPOINT my_savepoint; SELECT * FROM table1; -- shows rows 1 and 2 -- release the second savepoint RELEASE SAVEPOINT my_savepoint; -- rollback to the first savepoint ROLLBACK TO SAVEPOINT my_savepoint; SELECT * FROM table1; -- shows only row 1 COMMIT;
上述交易顯示先回滾第 3 列,然後回滾第 2 列。
SQL 要求在建立另一個具有相同名稱的儲存點時,自動銷毀儲存點。在 PostgreSQL 中,舊的儲存點會被保留,儘管在回滾或釋放時只會使用較新的儲存點。(使用 RELEASE SAVEPOINT
釋放較新的儲存點將導致舊的儲存點再次可以透過 ROLLBACK TO SAVEPOINT
和 RELEASE SAVEPOINT
存取。)否則,SAVEPOINT
完全符合 SQL 標準。
如果您在文件中發現任何不正確、與您特定功能的使用經驗不符或需要進一步澄清的地方,請使用此表格來回報文件問題。