使用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
相关产品推荐
相关产品推荐

