【发布时间】:2017-11-03 22:14:21
【问题描述】:
我正在使用ColumnSet 和helper.insert 函数进行多行插入。
我有一个表格列,我想在其中使用 Postgres Date/Time now() 函数。
const cs = new helpers.ColumnSet([
'lastname',
{
name: 'rental_date',
def: 'now()'
}
], { table: { table: 'book_rental', schema: 'public' } })
let rentals = [
{
lastname: 'Mueller'
},
{
lastname: 'Johnson'
}
]
let insert = helpers.insert(rentals, cs)
db.result(insert)
.then(data => res.json({ message: 'Ok!' }))
.catch(err => res.json({ message: 'Not ok!' }))
使用def: 'now()' 似乎可以正常工作,但我想确保以正确的方式使用它。
编辑:
关于评论中的答案。我尝试手动进行插入,看起来 Postgres 正在将 'now()' 字符串转换为 now() 函数。
INSERT INTO book_rental (lastname, rental_date) VALUES ('Mueller', 'now()');
涉及您的答案,我认为这应该是正确的代码吗?
const cs = new helpers.ColumnSet([
'lastname',
{
name: 'rental_date',
mod: ':raw',
def: 'now()'
}
], { table: { table: 'book_rental', schema: 'public' } })
【问题讨论】:
-
It seems to be working?你能说得更具体点吗?看起来它不起作用,因为您需要使用原始文本字符串,而不是转义文本字符串。 -
对不起,我是说使用上面的代码并在插入后检查数据库,
rental_date正确存储为timestamptz。这就是为什么我认为它有效。 -
def仅在属性缺失时使用。如果没有丢失,则使用列值代替,因此它可能无法正常工作。如果你想确定,你应该改用init。 -
您的更新确实可以解决一个问题。对于另一个 - 见我的回答;)
-
您知道,
:raw内联语法更短,并且适用于库的所有版本。作为作者,我自己有时甚至会忘记这些细节 :))) 毕竟,我确实将它设计为最终灵活。所以我更新了我的答案。我
标签: javascript pg-promise