多個儲存點與回復(rollback)

PostgreSQL 的交易與錯誤處理

Jason Myers

Principal Engineer

多個儲存點

BEGIN TRANSACTION;

UPDATE inventory SET quantity = quantity - 1 WHERE name in ('flour', 'sugar');

SAVEPOINT inventory_step;

INSERT baking_list SET quantity=12 WHERE name='Torun';

SAVEPOINT queuing_step;

UPDATE cookies SET quantity = 12 WHERE name = 'Torun';
PostgreSQL 的交易與錯誤處理

重複的儲存點名稱

  • 在同一個交易中,新的、與先前同名的 SAVEPOINT 會「遮蔽」舊的,而不是覆寫或釋放舊的!
  • 一般建議在一個交易裡不要重複使用名稱。
PostgreSQL 的交易與錯誤處理

重複儲存點名稱範例

BEGIN TRANSACTION;

UPDATE inventory SET quantity = quantity - 1 WHERE name in ('flour', 'sugar');

SAVEPOINT oops;

INSERT baking_list SET quantity=12 WHERE name='Torun';

SAVEPOINT oops;

UPDATE cookies SET quantity = 12 WHERE name = 'Torun';
PostgreSQL 的交易與錯誤處理

一起來練習吧!

PostgreSQL 的交易與錯誤處理

Preparing Video For Download...