You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL 12.15中添加anycompatiblearray类型并运行聚合函数

问题描述

尝试执行以下SQL语句:

CREATE AGGREGATE array_concatenation_aggregate(anycompatiblearray) (SFUNC=array_cat, STYPE=anycompatiblearray)
DROP AGGREGATE IF EXISTS array_concatenation_aggregate(anycompatiblearray)

出现错误:

(Postgrex.Error) ERROR 42704 (undefined_object) type anycompatiblearray does not exist

已知anycompatiblearray仅在PostgreSQL新版本中支持,询问是否能在12.15版本中添加该类型以让上述查询正常运行。

解决方案
  • 无法直接添加anycompatiblearray类型:anycompatiblearray是PostgreSQL 14及以上版本引入的原生多态数组类型,它依赖新版本核心类型系统的底层逻辑,属于内置系统类型,无法在PostgreSQL 12.15中通过自定义类型或扩展的方式添加支持。

  • 替代方案1:针对具体数组类型创建聚合函数
    如果业务只需要处理特定类型的数组(比如text[]、int[]),可以直接针对该类型创建聚合函数:

    -- 以text数组为例
    CREATE AGGREGATE array_concatenation_aggregate(text[]) (SFUNC=array_cat, STYPE=text[]);
    DROP AGGREGATE IF EXISTS array_concatenation_aggregate(text[]);
    

    按需为其他需要的数组类型重复上述操作即可。

  • 替代方案2:使用anyarray替代
    PostgreSQL 9.3及以上版本支持anyarray这一多态数组类型,它是anycompatiblearray的前身,虽然不支持跨类型的隐式兼容转换,但可以实现通用的同类型数组合聚:

    CREATE AGGREGATE array_concatenation_aggregate(anyarray) (SFUNC=array_cat, STYPE=anyarray);
    DROP AGGREGATE IF EXISTS array_concatenation_aggregate(anyarray);
    

    注意:使用anyarray时,所有传入的数组必须是同一数据类型,否则会触发类型不匹配错误。

  • 彻底解决办法
    如果必须用到anycompatiblearray的跨类型兼容特性,唯一可行的方式是将PostgreSQL版本升级到14或更高版本。

内容的提问来源于stack exchange,提问作者Junaid Farooq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 03:12:44