1、簡單查詢(Simple Query)
簡單地把 SQL 語句發送給 backend,backend 也只是簡單地執行該 SQL 語句並把結果回復給 client。
client 發送 SQL 語句 insert into guestbook values(11,'off');
backend 回復結果
2、擴展查詢(Extended Query)
首先解釋一下 prepared-statement:需求是用戶有一條 A 語句,需要被反復執行;數據庫為這類語句設置了對應的捷徑,避免了反復執行類似語句造成的資源浪費。
擴展查詢可以理解為簡單查詢被拆分為幾個步驟:
– Parse 指定 SQL 語句,可能含有類似 ($1,$2,$3,$4) 這種參數
– Bind 指定捷徑的名字,填入變量的具體參數值
– Execute 執行該語句
其他的 Describe、Sync 等命令詳解可參考官網文檔。
參考示例
連到備端執行 insert into test values(trunc(random()*1000), 'abcdefg');
backend 回復執行失敗
3、默認方式說明
經過測試發現,psql 默認使用簡單查詢方式,JDBC、ODBC、Npgsql默認使用擴展查詢方式。
其中,JDBC 內提供了 preferQueryMode 參數,可通過此參數將 JDBC 修改為使用簡單查詢方式。
其他參考鏈接:
https://www.postgresql.org/docs/current/protocol-flow.html#PROTOCOL-COPY