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

调用to_timestamp函数报错:function to_timestamp(character varying[], unknown)不存在

问题原因与解决办法

核心问题

你遇到的异常是因为**to_timestamp函数不支持直接接收数组作为输入参数**,而你传入的@3是一个字符串数组(character varying[]),PostgreSQL找不到匹配的函数签名,所以报错。

分场景解决

场景1:date字段是单个时间值

如果你的table表中date字段是单个timestamp类型,那说明你传参时搞错了——对应date的val.Values误传成了数组。检查valuesToInsert里的日期数据,改成单个字符串值,同时去掉该参数的NpgsqlDbType.Array标记。

场景2:date字段是时间数组类型(timestamp[])

如果date字段确实需要存储数组,得把数组里的每个元素单独转成时间,再重新组合成时间数组。修改SQL语句如下:

INSERT INTO table (name, value, date) 
VALUES (@1, @2, (SELECT array_agg(to_timestamp(elem, 'YYYYMMDDHH24MISSUS')) FROM unnest(@3) AS elem))

这段SQL的逻辑是:用unnest把字符串数组拆成单个元素,对每个元素调用to_timestamp转换,再用array_agg重新组合成时间数组。

额外提醒

你代码里的GetTypeByObject方法有个小问题:把bool类型归为Numeric是不对的,应该单独指定NpgsqlDbType.Boolean,否则可能出现类型转换异常:

NpgsqlDbType GetTypeByObject(object[] obj)
=> obj.FirstOrDefault() switch
{
    string => NpgsqlDbType.Varchar,
    int or long => NpgsqlDbType.Numeric,
    bool => NpgsqlDbType.Boolean,
    double or float => NpgsqlDbType.Double,
    _ => NpgsqlDbType.Unknown,
}

内容的提问来源于stack exchange,提问作者semper fi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:25:20