Разработано 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 в базу данных?
Благодарим вас за ответы на два вопроса.
Следующий 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
), что означает необработанный текст (не требуется экранирование). Помимо этого, тип столбца объясняет это более подробно.