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

使用Drizzle ORM向PostgreSQL表数组列插入值报错求助

解决Drizzle ORM插入PostgreSQL文本数组列的语法错误问题

错误原因

你代码里的ARRAY${[...myuuidArr]}写法不符合Drizzle ORM的参数绑定规则,Drizzle会把数组展开成多个独立参数,导致生成的SQL出现ARRAY$6这种非法语法,触发syntax error at or near "$6"错误。

解决方案

方案1:使用Drizzle内置的sql.array()函数

这是最可靠的方式,sql.array()会自动将数组转换为PostgreSQL可识别的数组参数,处理绑定逻辑。

修改后的代码:

// 用map替代for循环,简化数组生成
const myuuidArr = results.map(item => item.userid);

await db.execute(sql`
  insert into owners (userid, ownername, phonenumber, scplace, workers) 
  values (
    ${id}::uuid,
    ${email}::character varying(26),
    ${phoneNumber}::character varying(10),
    ST_SetSRID(ST_MakePoint(${latitude}, ${longitude}), 4326)::geometry,
    ${sql.array(myuuidArr, 'text')}
  )
`);

sql.array()的第二个参数指定数组元素的类型,这里对应workers列的text类型。

方案2:显式指定数组参数类型

如果不想用sql.array(),可以直接传递数组并显式声明类型:

const myuuidArr = results.map(item => item.userid);

await db.execute(sql`
  insert into owners (userid, ownername, phonenumber, scplace, workers) 
  values (
    ${id}::uuid,
    ${email}::character varying(26),
    ${phoneNumber}::character varying(10),
    ST_SetSRID(ST_MakePoint(${latitude}, ${longitude}), 4326)::geometry,
    ${myuuidArr}::text[]
  )
`);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:42:39