本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
並行寫入範例
下列虛擬程式碼範例示範交易如何繼續或在並行執行時等候。
將COPY操作並行至相同的資料表
交易 1 將資料列複製到LISTING資料表中:
begin; copy listing from ...; end;
交易 2 會在單獨的工作階段中同時開始,並嘗試將更多資料列複製到LISTING資料表中。交易 2 必須等到交易 1 釋放LISTING資料表上的寫入鎖定,然後才能繼續。
begin; [waits] copy listing from ; end;
如果一個或兩個交易包含 INSERT命令而非 COPY命令,則會發生相同的行為。
來自相同資料表的並行DELETE操作
交易 1 會從資料表刪除資料列:
begin; delete from listing where ...; end;
交易 2 會並行開始,並嘗試從相同的資料表刪除資料列。它會成功,因為它會在嘗試刪除資料列之前等候交易 1 完成。
begin [waits] delete from listing where ; end;
如果一個或兩個交易包含對相同資料表的UPDATE命令,而不是DELETE命令,則會發生相同的行為。
使用讀取和寫入操作混合的並行交易
在此範例中,交易 1 會從USERS資料表中刪除資料列、重新載入資料表、執行 COUNT(*) 查詢,然後刪除 ANALYZE,然後再提交:
begin; delete one row from USERS table; copy ; select count(*) from users; analyze ; end;
同時,交易 2 會開始。此交易會嘗試將其他資料列複製到USERS資料表中、分析資料表,然後執行與第一個交易相同的 COUNT(*) 查詢:
begin; [waits] copy users from ...; select count(*) from users; analyze; end;
第二個交易將會成功,因為它必須等候第一個完成。其COUNT查詢會根據其已完成的載入傳回計數。