节点pg-promise,使用类型转换绑定多个值

时间:2018-10-01 10:49:48

标签: pg-promise

我目前正在使用pg-promise库将以下格式的多个值插入数据库:

const cs = new pgp.helpers.ColumnSet(['booking_id', {name:'timeslot', cast:'timestamp'}], {table: 'booking'});

// data input values:
const values = [];
bookings.forEach(slot => {
   values.push({booking_id: booking_id, timeslot: slot});
});

我需要将时隙作为时间戳记的地方。但是,它作为

之类的值进入API

1515586500.0

使用上面的cast属性,我的查询将像这样被解析

insert into "booking"("booking_id","timeslot") values(1,'1515586500.0'::timestamp)

但这会引发cannot cast type numeric to timestamp without time zone

错误

但是,如果我使用to_timestamp函数,那么这可以满足我的需要,例如

insert into "booking"("booking_id","timeslot") values(1,to_timestamp('1515586500.0'));

有什么方法可以使pg-promise使用to_timestamp而不是::timestamp表示法吗?

1 个答案:

答案 0 :(得分:0)

将列定义更改为此:

{
    name: 'timeslot',
    mod: ':raw',
    init: c => pgp.as.format('to_timestamp($1)', c.value)
}

{
    name: 'timeslot',
    mod: ':raw',
    init: c => pgp.as.format('to_timestamp(${value})', c)
}

...根据Column类型文档。

或者您可以在类型上使用Custom Type Formatting,以自动进行自我格式化。


此外,您不需要重新映射值以适合ColumnSet对象,而可以使用ColumnSet对象来容纳数据。因此,如果列timeslot的值在属性slot中,则只需在列定义中使用prop: 'slot'即可更改值的来源。