cannot insert multiple commands into a prepared statement問題原因及解決辦法
阿新 • • 發佈:2018-11-30
問題是這樣,我在對資料庫進行寫操作(新增、刪除、修改)時,我想同時刪除兩個表中的兩條關聯資料,像這樣
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}'`