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

