私はColumnSetとhelper.insert関数を複数行の挿入に使用しています。pg-promise ColumnSetはdefプロパティ付きのPostgres関数を使用します
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' } })
'あると思われますあなたはより具体的になることができますか?エスケープされたテキスト文字列ではなく、生のテキスト文字列を使用する必要があるため、うまくいかないようです。 –
申し訳ありませんが、上記のコードを使用し、挿入後にデータベースをチェックすると、 'rental_date'は' timestamptz'として正しく保存されています。それが私がそれが働いていると思った理由です。 – abergavenny
'def'はプロパティが存在しない場合にのみ使用されます。欠落していない場合は、列の値が代わりに使用されるため、機能していない可能性があります。確かめたいならば、代わりに 'init'を使うべきです。 –