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

Node.js + pg 向PostgreSQL的bytea字段插入二进制数据的正确方法是什么

插入二进制数据的正确操作步骤

  1. 确认PostgreSQL表字段类型
    存储二进制数据的img_data字段必须设置为bytea类型,该类型是PostgreSQL专门用于存储二进制数组的字段类型。
  2. 二进制数据转Node.js Buffer类型
    pg库对bytea类型的参数要求必须传入Node.js标准Buffer实例,你当前拿到的product_image_data是二进制字符串格式(从你写文件时指定binary编码可以确认),需要手动转换为Buffer:
const req = "INSERT INTO public.product (" +
            "name, doc_name, purchase_price, selling_price, weight, " +
            "id_string, landing_url, img_data, img_name,  active) " +
            "VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10);";

const values = [
  obj.product_name, obj.product_doc_name,
  obj.product_purchase_price, obj.product_selling_price, obj.product_weight,
  obj.product_id_string, obj.product_landing_url,
  // 替换原来的obj.product_image_data,转成Buffer
  Buffer.from(obj.product_image_data, 'binary'),
  obj.product_image_name,
  // 若active字段为boolean类型,建议直接传布尔值而非字符串
  true
];
  1. 可选:优化Express请求解析配置
    如果你的接口仅用于上传二进制数据,可以直接使用express.raw()中间件解析请求体,此时req.body本身就是Buffer实例,不需要额外转换。

验证方法

插入成功后查询该条数据,拿到的img_data字段会是Buffer类型,可直接用fs.writeFileSync('./test.png', 查询返回的img_data)写成本地文件验证完整性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:45:03