Postgresql

從選擇中插入而不失去Postgresql中間的進度?“插入…選擇…其中…不存在(…)”

  • December 6, 2021

是否可以將數據移動到新表中以獲取其他表而不會在中間失去進度?

我認為plpgsql在每 N 次插入後按塊讀取數據並送出……如果過程在中間停止,則條件NOT EXISTS (...)允許通過再次重複過程來添加失去的數據。

我認為它是重要的模式,並且可能直接使用以下語法支持它:

INSERT INTO ... SELECT ... WHERE ... AND NOT EXISTS (...)

複製中斷的原因可能是約束或使用者暫停操作。我們仍然希望不失去進度和恢復過程(在NOT EXISTS (...)警衛的幫助下)。

複製中斷的原因可能是約束或使用者暫停操作。

如果是關於使用者“暫停”操作,aPROCEDUREDO語句可能是正確的選擇(Postgres 11+)。INSERT 一次N行,COMMIT每次迭代後。看:

如果來源是穩定的,並且您可以跟踪不斷增加的最小 ID 或類似的東西,那麼在中斷後接聽可能會更便宜。

但是,如果它只是一個在違反時可能引發異常的約束,請使用 UPSERT 查詢來解決衝突:INSERT .. ON CONFLICT .... 衝突行動取決於未公開的細節。

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