Postgresql

pgsql 或任何數據庫中的批量插入行為

  • June 22, 2020

我正在使用 PostgreSQL 9.2.4。

我正在處理具有大量數據的多個表。

我有兩個表 Table_One,其中一個欄位為 varchar(250),而 Table_Two 欄位之一為 varchar(200)。

可以說,Table_One 有 20 條記錄,其中 2 條記錄的欄位包含 250 個字元。

我正在通過如下查詢進行批量插入

insert into Table_Two(id, INSTANCEwithVarchar, MIN, MAX)(SELECT id, INSTANCEwithVarchar, MIN, MAX from Table_One)

插入具有 varchar 250 的 Table_One 記錄時會出現異常。

我的問題是,

Table_Two 會插入 18 條記錄嗎?

或者即使 20 條記錄中的一條記錄違反了約束,批量插入 Table_Two 也會完全失敗?

如果沒有,假設 Table_Two 增加了 18 條記錄,那麼失敗的順序是什麼?如果Table_One的第一條記錄有varchar 250,那麼整個過程會失敗還是pgsql本身忽略失敗並成功添加剩餘記錄?

(使用 PostgreSQL 9.2)

您的語句在事務中執行。如果還沒有打開的事務,則僅為該語句創建一個事務,如果該語句成功,則在最後自動送出。

如果語句遇到錯誤,事務會自動回滾,所以沒有任何作用。

整個聲明要麼生效,要麼都不生效。

(請注意,您可以嘗試確定這一點)。

引用自:https://dba.stackexchange.com/questions/97399