Узел pg-обещание, связать несколько значений с помощью приведения типов - PullRequest
0 голосов
/ 01 октября 2018

В настоящее время я использую библиотеку pg-обещание для вставки нескольких значений в базу данных в формате:

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-обещание использовать to_timestamp, а не ::timestamp нотация?

1 Ответ

0 голосов
/ 01 октября 2018

Измените определение столбца на это:

{
    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)
}

... в соответствии с документацией типа Столбец .

Или вы можете использовать Пользовательское форматирование типа для типа, чтобы автоматически отформатировать.


Кроме того, вам не нужно переназначать значения в соответствии с объектом ColumnSet, вы используете ColumnSet объект, чтобы соответствовать данным вместо этого.Поэтому, если значение для столбца timeslot находится в свойстве slot, вы просто используете prop: 'slot' в определении столбца, чтобы изменить источник значения.

...