Postgres @sqlupdate 转换数据类型

Postgres @sqlupdate casting data type

我有个小问题想寻求帮助。

在我的 Postgres table "user_profile" 中,我将以下 "video_uploaded" 列定义为

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

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

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

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

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

罗伊

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