1 回答

TA贡献1860条经验 获得超9个赞
方法func需要一个值数组作为第二个参数。在您的情况下,它必须是一个参数 - 对象数组。但是您改为给它 2 个参数,每个参数都是一个对象,因此会出现错误。
正确的方法是:
const orderInput = [{item:"Red Widget", quantity:10}, {item:"Blue Widget", quantity:5}];
await db.func('insert_into_orders', [orderInput]);
无论如何,您应该使用事件查询或pg-monitor来查看生成了什么 SQL。
另外,您insert_into_orders应该是一个存储过程,然后至少通过proc执行。但是,它的实现看起来应该只是代码中的一个事务。
执行此操作后,错误返回为"error": {"message": "function insert_into_orders(text[]) does not exist"}
那是因为类型不匹配,这需要类型转换......
您可以通过常规查询方法调用该函数,也可以使用自定义类型格式来修改数据格式:
const data = {
toPostgres: () => `${pgp.as.array(orderInput)}::json[]::order_input[]`,
rawType: true
};
然后将其传入:
await db.func('insert_into_orders', [data]);
添加回答
举报