Как установить столбцы при использовании помощников в pg-promise

1

Разработано node.js. Я использую pg-обещание.

Существует проблема с вставкой следующих данных.

Я хочу вставить несколько строк данных в таблицу ниже.

create table info (
  id varchar(20) not null,
  name varchar(20) not null,
  createdate timestamp with time zone not null
)

Я вставил данные ниже.

let info = [
  { myid: '0001', myname: 'name1' },
  { myid: '0002', myname: 'name2' },
  { myid: '0003', myname: 'name3' },
]

Вначале я вставил следующее.

for (let i = 0; i <info.length; i ++) {
  db.none ('INSERT INTO info (id, name, createdate ') VALUES ($1, $2, CURRENT_TIMESTAMP)', [info[i].id, info[i].name])
}

Я хочу исправить это правильно, используя pg-prom.

const dataMulti = info
const cs = new pgp.helpers.ColumnSet(
[
  'id',
  'name',
  'createdate',
], {
  table: 'info',
})
await db.none(pgp.helpers.insert(dataMulti, cs))

Вот,

1. Нельзя вставлять, когда ключ данных вставки отличается от. имя столбца таблицы?

Я знаю, что есть pgp.helpers.ColumnSet()

Ошибка: идентификатор свойства 'id' не существует.

Произошла та же ошибка.

Мне любопытно отношение между именами столбцов таблицы и ColumnSets для параметров столбцов.

2. При использовании помощников выше, как мне вставить текущее время current_timestamp в базу данных?

Благодарим вас за ответы на два вопроса.

Теги:
pg-promise
pg

1 ответ

0
Лучший ответ

Следующий ColumnSet исправляет все ваши проблемы:

const cs = new pgp.helpers.ColumnSet([
    {name: 'id', prop: 'myid'},
    {name: 'name', prop: 'myname'},
    {name: 'createdate', mod: '^', def: 'CURRENT_TIMESTAMP'}
], {
    table: 'info'
});

См. Раздел " Колонка" для того, что доступно для настройки отдельных столбцов.

применение CURRENT_TIMESTAMP трудно понять...

{name: 'createdate', mod: '^', def: 'CURRENT_TIMESTAMP'}

Это столбец с именем createdate, со значением по умолчанию CURRENT_TIMESTAMP и модификатором форматирования ^ (то же, что и :raw), что означает необработанный текст (не требуется экранирование). Помимо этого, тип столбца объясняет это более подробно.

  • 0
    Большое спасибо. Теперь я знаю, что это особенность. Однако применение current_timestamp сложно понять. Могу ли я попросить немного больше объяснений?
  • 0
    Я не знаю, как инициализировать «rawText».
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню