PostgreSQL使用array_remove操作BIGINT数组报错问题咨询
解决PostgreSQL中
array_remove操作bigint[]数组的类型不匹配报错 你遇到的这个报错完全是参数类型不匹配搞的鬼!虽然PostgreSQL文档里说array_remove支持anyarray和anyelement类型,但它对类型一致性要求特别严格——你写的1默认是integer类型,而你的数组是bigint[],两者类型不兼容,数据库自然找不到对应的函数重载了。
两种快速解决方法:
- 显式类型转换:把要移除的元素转成
bigint类型,用::bigint或者CAST语法都可以:UPDATE MyTABLE SET MyBigIntArray = array_remove(MyBigIntArray, 1::bigint) WHERE id=10; - 直接使用bigint字面量:在数字后面加
L后缀,PostgreSQL会识别为bigint类型:UPDATE MyTABLE SET MyBigIntArray = array_remove(MyBigIntArray, 1L) WHERE id=10;
补充说明:
PostgreSQL的函数重载是严格匹配参数类型的,不存在array_remove(bigint[], integer)这个版本的函数,只有当第二个参数的类型和数组元素类型完全一致(也就是bigint)时,对应的array_remove(bigint[], bigint)函数才会被正确调用。这也是为什么你明明看了文档说支持任意数组和元素,却还是报错的原因——类型匹配没做好!
内容的提问来源于stack exchange,提问作者Crafty
相关产品推荐
相关产品推荐

