1. 程式人生 > >cannot insert multiple commands into a prepared statement問題原因及解決辦法

cannot insert multiple commands into a prepared statement問題原因及解決辦法

問題是這樣,我在對資料庫進行寫操作(新增、刪除、修改)時,我想同時刪除兩個表中的兩條關聯資料,像這樣

let sql = `
DELETE FROM bridge_parts
WHERE id = $1;
DELETE FROM bridge_quantity 
WHERE bridge_part_id = $2`

然後使用 client.query(sql,[item1,item2]) 來執行刪除操作,這個時候問題出現了,pgsql報錯,錯誤如下

cannot insert multiple commands into a prepared statement

查了一下原因,是pg語句預處理的問題,可以使用pg_prepare,但僅用於單獨的語句,而不是整個事務,預處理語句是遞交給PostgreSQL的語句,然後將其解析並存儲為解析樹以供將來使用。在第一次執行時,將使用提供的輸入計劃解析樹,並執行該計劃,並將計劃快取以供將來使用。通常使用預準備語句沒有多大意義,除非你想重用查詢計劃(即執行大量相同的更新語句,大致相同的行數),所有這些都在同一個事務中。

意思就是說pg_prepare只能對單獨的sql進行預處理,不能同時預處理兩條sql語句

怎麼修改呢,就是把pg執行預處理改為手動或者只對其中的一條語句進行預處理

let sql = `
DELETE FROM bridge_parts
WHERE id = '${id}';
DELETE FROM bridge_quantity 
WHERE bridge_part_id = '${bridgePartId}'`

參考連結:
https://stackoverflow.com/questions/19589841/pg-prepare-cannot-insert-multiple-commands-into-a-prepared-statement