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

Drizzle ORM在PostgreSQL中存储JSON为字符串的问题求助

解决Drizzle插入PostgreSQL JSON列存为字符串的问题

1. 检查插入代码是否手动序列化JSON

如果插入时调用了JSON.stringify(),会导致数据以字符串形式存入。正确做法是直接传入JS对象,Drizzle会自动将其序列化为PostgreSQL的JSON类型:

错误示例:

await db.insert(transactions).values({
  my_json: JSON.stringify({ hello: "world" }) // 存为字符串
});

正确示例:

await db.insert(transactions).values({
  my_json: { hello: "world" } // 直接传JS对象,Drizzle自动处理
});

2. 确认驱动配置无异常

使用pg驱动时,无需额外配置JSON类型转换,Drizzle默认会正确处理。如果之前自定义过类型转换逻辑,检查是否覆盖了默认的JSON序列化行为。

3. 改用jsonb类型(可选优化)

PostgreSQL的jsonb类型支持索引、更灵活的查询,Drizzle原生支持该类型,修改表结构定义即可:

export const transactions = pgTable("transactions", {
  id: serial("id").primaryKey(),
  my_json: jsonb('my_json') // 替换为jsonb类型
});

插入时同样直接传JS对象,存储后即为标准JSONB对象,和Supabase编辑器操作的效果一致。

4. 修复已存入的字符串格式JSON

如果已经有字符串格式的JSON数据,读取时可手动解析:

const result = await db.select().from(transactions);
const parsedData = result.map(item => ({
  ...item,
  my_json: typeof item.my_json === 'string' ? JSON.parse(item.my_json) : item.my_json
}));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:42:03