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

PostgreSQL执行INSERT报错:birthdate是timestamp类型但表达式为text

问题原因

你触发报错的核心原因是INSERT语句指定的插入列顺序和SELECT子句返回的列顺序完全错位,导致值的类型和目标列不匹配:

  • 你声明的插入列顺序为 (name,gender,birthDate,userId)
  • 但SELECT返回的列顺序依次是 userId、name、gender、birthDate
  • 错位后,原本属于gender字段的文本类型值被匹配到了birthDate的插入位置,就触发了「文本类型无法匹配timestamp类型」的报错。

修复方案

只需要调整SELECT子句的列顺序,和插入列的顺序对应即可,修改后的语句如下:

INSERT INTO profile.profile(name,gender,birthDate,userId)
      SELECT 
          substr(md5(random()::text), 0, 5) AS name,
          substr(md5(random()::text), 0, 2) AS gender,
          to_timestamp('2021-08-09 13:57:40', 'YYYY-MM-DD hh24:mi:ss') AS birthDate,
          userId
      FROM 
          generate_series(1,10) AS y(userId)

补充注意

PostgreSQL默认会将未加双引号的标识符自动转为全小写,如果你需要保留列名的大小写格式,建表和操作时需要给列名包裹双引号,比如"birthDate"。本次报错和大小写无关,不需要修改建表语句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:36:08