

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 並行寫入範例
<a name="r_Serializable_isolation_example"></a>

下列虛擬程式碼範例示範交易如何繼續或在並行執行時等候。

## 具有可序列化隔離的並行寫入範例
<a name="r_Serializable_isolation_example-serializable"></a>

### 在具有可序列化隔離的相同資料表中進行並行 COPY 操作
<a name="r_Serializable_isolation_example-concurrent-copy-operations-into-the-same-table"></a>

交易 1 會將資料列複製到 LISTING 資料表：

```
begin;
copy listing from ...;
end;
```

交易 2 會在個別的工作階段中並行開始，並嘗試複製更多資料列至 LISTING 資料表。交易 2 必須等候交易 1 釋出 LISTING 資料表上的寫入鎖定，然後才能繼續。

```
begin;
[waits]
copy listing from ;
end;
```

如果一或兩個交易包含了 INSERT 命令而非 COPY 命令，可能發生相同的行為。

### 從具有可序列化隔離的相同資料表進行並行 DELETE 操作
<a name="r_Serializable_isolation_example-concurrent-delete-operations-from-the-same-table"></a>

交易 1 會從資料表刪除資料列：

```
begin;
delete from listing where ...;
end;
```

交易 2 會並行開始，並嘗試從相同的資料表刪除資料列。它會成功，因為它會在嘗試刪除資料列之前等候交易 1 完成。

```
begin
[waits]
delete from listing where ;
end;
```

如果一或兩個交易包含了對相同資料表的 UPDATE 命令而非 DELETE 命令，可能發生相同的行為。

### 混合使用具有可序列化隔離的讀取和寫入操作的並行交易
<a name="r_Serializable_isolation_example-concurrent-transactions"></a>

在此範例中，交易 1 會在認可之前，從 USERS 資料表刪除資料列，重新載入資料表，執行 COUNT(\$1) 查詢，然後 ANALYZE：

```
begin;
delete one row from USERS table;
copy ;
select count(*) from users;
analyze ;
end;
```

同時，交易 2 會開始。此交易會嘗試複製額外的資料列至 USERS 資料表，分析資料表，然後執行與第一個交易相同的 COUNT(\$1) 查詢：

```
begin;
[waits]
copy users from ...;
select count(*) from users;
analyze;
end;
```

第二個交易將會成功，因為它必須等候第一個完成。其 COUNT 查詢將根據它完成的載入傳回計數。

## 具有快照隔離的並行寫入範例
<a name="r_Serializable_isolation_example-snapshot"></a>

### 在具有快照隔離的相同資料表中進行並行 COPY 操作
<a name="r_Serializable_isolation_example-concurrent-copy-operations-into-the-same-table-snapshot"></a>

交易 1 會將資料列複製到 LISTING 資料表：

```
begin;
copy listing from ...;
end;
```

交易 2 會在個別的工作階段中並行開始，並嘗試複製更多資料列至 LISTING 資料表。交易 2 可以同時進行，直到任一交易需要將資料寫入目標資料表 `listing`，此時交易將依序執行。

```
begin; 
//When the COPY statement from T1 needs to write data to the table, the COPY statement from T2 waits.
copy listing from ...; 
end;
```

如果一或兩個交易包含了 INSERT 命令而非 COPY 命令，可能發生相同的行為。

### 從具有快照隔離的相同資料表進行並行 DELETE 操作
<a name="r_Serializable_isolation_example-concurrent-delete-operations-from-the-same-table-snapshot"></a>

從具有快照隔離的相同資料表進行的並行 DELETE 或 UPDATE 操作，其執行方式與具有可序列化隔離的操作相同。

### 混合使用具有快照隔離的讀取和寫入操作的並行交易
<a name="r_Serializable_isolation_example-concurrent-transactions-snapshot"></a>

使用具有快照隔離的混合操作執行的並行交易，其執行方式與使用具有可序列化隔離之混合操作的交易相同。