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

Liquibase上传CSV双精度值到PostgreSQL出现类型不匹配报错

问题根因

Liquibase的loadData变更默认将CSV中所有未显式声明类型的字段按VARCHAR类型传入预编译SQL,PostgreSQL不支持将字符串类型隐式转换为double precision双精度浮点类型,因此抛出类型不匹配异常。你之前尝试指定NUMERIC类型无法解决问题,因为NUMERIC是精确数值类型,和目标列的double precision类型不匹配,PostgreSQL同样不会做隐式跨类型转换。

修复方法

在loadData配置节点下正确嵌套columns配置,显式将所有浮点列的类型声明为DOUBLE(Liquibase会自动将该类型映射为PostgreSQL适配的double precision类型),修改后的完整配置如下:

databaseChangeLog:
  - changeSet:
      id: usagesCsvData
      author: malte_enbergs
      changes:
        - loadData:
            tableName: usages
            separator: ;
            file: classpath:/liquibase/data/usages.csv
            columns:
              - column:
                  header: cost
                  type: DOUBLE
              - column:
                  header: cost_total_amount_due
                  type: DOUBLE
注意事项
  • 配置时注意YAML缩进层级,columns必须是loadData的子节点,缩进错误会导致类型声明完全不生效,这是最常见的配置踩坑点。
  • 如果后续导入时其他列也报同类类型错误,按相同规则补充类型声明即可:整型字段对应BIGINT/INTEGER类型,你CSV里的时间字段对应TIMESTAMP类型。
  • 不需要修改CSV原始数据格式,你当前CSV里的浮点值写法完全符合导入要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:06:22