2016-05-17 78 views
1

我有一個簡單的問題來尋求幫助。Postgres @sqlupdate鑄造數據類型

以我的Postgres表「user_profile」我有以下「video_uploaded」列定義爲

id      | character(19) 
    videos_uploaded  | character(19)[]    | 

存儲該視頻ID(固定長度,19個字符)。

當我使用@SqlUpdatearray_append功能在DAO接口像下面

@SqlUpdate("UPDATE user_profile set videos_uploaded = array_append(videos_uploaded, :vid) where id = :id") 

    void appendVideoToUpload(@Bind("id") String id, @Bind("vid") String vid); 

程序會拋出以下異常

ERROR: function array_append(character[], character varying) does not exist ! Hint: No function matches the given name and argument types. You might need to add explicit type casts

似乎要求增加明確的類型轉換中寫道,我再加入鑄像

array_append(videos_uploaded::varchar[], :vid::varchar) 

但類似的異常仍然發生。任何熟悉該問題的人都可以提供一些快速幫助嗎?謝謝!

羅伊

回答

0

CHAR和VARCHAR是不同的數據類型,所以採取anyarray, anyelement將失敗的功能。這兩個參數必須是同一類型,所以你可以嘗試要麼

= array_append(videos_uploaded::varchar[], :vid)::char(19)[] 

= array_append(videos_uploaded, (:vid)::char(19)) 

如果你的軟件有參數和雙冒號鑄造(因爲參數是冒號這很可能是麻煩基於而不是問號爲主(?)使用CAST代替:

= CAST(array_append(CAST(videos_uploaded AS varchar[]), :vid) AS char(19)[]) 

= array_append(videos_uploaded, CAST(:vid AS char(19))) 
+0

感謝您的回覆。試了兩種選擇,但仍然失敗。錯誤消息顯示「沒有命名參數匹配」char「,並且沒有設置位置1的位置參數,困難的部分似乎是將array_append(...)中的vid解析爲char(19)元素 –

+0

這是從你的軟件在使用雙冒號(value :: type)來鑄造PostgreSQL風格時遇到了困難,使用'CAST(value AS type)'來代替它,它會工作。 –

+0

@ R.Zheng我已經用例子更新了回覆CAST –