1. 問題描述
同事團隊在使用springboot+mybatis+Greenplum時,發現通過mybatis數據查詢正常,但是執行insert和update執行會報“Cause: org.postgresql.util.PSQLException: ERROR: The RETURNING clause of the INSERT statement is not supported in this version of Greenplum Database.”。
而我們團隊使用Greenplum的模式是:晚上通過spark跑批入庫Greenplum,平台只使用了Greenplum的查詢功能,未使用Mybatis進行插入操作。
2. 解決方案
2.1 問題定位
首先創建同樣格式的test表,驗證jdbc方式是否可行,驗證后,發現jdbc能正常插入,認為問題可能出在mybtis或者postgre/greeenplum版本問題上。
2.2 定位結論
經過多次驗證,發現問題出在:
Mybatis3默認在插入或者更新數據后,會返回影響行數( int insert(trorgvehiclviewtest record);),但是Greenplum是基於postgresql8.2開發的,postgresql8.2不支持返回這個特性導致的。
2.3 解決方案
通過在insert/update語句后面,增加statementType參數可以解決該問題,statementType參數設置為"CALLABLE" 就能正常使用。
示例:
<insert id="insert" parameterType="com.laowang.Test" statementType="CALLABLE">
</insert>
取值說明:
1、STATEMENT:直接操作sql,不進行預編譯,獲取數據:$—Statement
2、PREPARED:預處理,參數,進行預編譯,獲取數據:#—–PreparedStatement:默認
3、CALLABLE:執行存儲過程————CallableStatement