Postgres @sqlupdate投射数据类型

时间:2016-05-17 22:19:53

标签: postgresql casting dao

我有一个快速的问题要求帮助。

在我的Postgres表中" user_profile"我跟随" video_uploaded"列定义为

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

存储视频ID(固定长度为19个字符)。

当我在DAO界面中使用@SqlUpdate函数编写array_append时,如下所示

    @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);

程序总是抛出以下异常

  

错误:函数array_append(character [],字符变化)不存在   !提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换

似乎要求添加显式类型转换,然后添加类似

的转换
array_append(videos_uploaded::varchar[], :vid::varchar)

但仍然会发生类似的异常。任何熟悉这个问题的人都能提供一些快速帮助吗?谢谢!

罗伊

1 个答案:

答案 0 :(得分: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)))