2017-09-17 15 views
1

node.jsが開発しました。私はpg-promiseを使用しています。pg-promiseでヘルパーを使用するときに列を設定する方法

次のデータを挿入する際に問題があります。

以下の表に、複数の行のデータを挿入したいとします。

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-promiseを使用して正しく修正したいです。ここで

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

挿入データのキーが異なる場合には、

1.挿入することはできません。テーブルの列名?

I know there is pgp.helpers.ColumnSet()

Error: Property 'id' does not exist.

The same error occurs.

I am curious about the relationship between table column names and ColumnSets for column settings.

2.上記のヘルパーを使用する場合、どのように私は、データベース内の現在の時間CURRENT_TIMESTAMPを挿入していますか?

この2つの質問にお返事いただきありがとうございます。

答えて

0

ColumnSetは、すべてのあなたの問題を修正します。

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

は、個々の列を設定するために利用できる何のためにColumnを参照してください。

the application of CURRENT_TIMESTAMP is difficult to understand...

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

それは生のテキストを意味し、デフォルト値CURRENT_TIMESTAMPと(:rawと同じ)のフォーマット修飾子^createdateという名前の列、(何のエスケープは必要ありません)です。それ以外の場合は、Columnタイプで詳細に説明されています。

+0

ありがとうございます。私は今これが特徴であることを知っています。 **しかし、current_timestampのアプリケーションを理解するのは難しいです。**もう少し説明をお願いできますか? – hyeokluv

+0

「rawText」を初期化する方法がわかりません。 – hyeokluv

+0

@hyeokluv私の答えでは 'rawText'のようなものはありません;)最新のものを使用してください;簡略化されました;) –

関連する問題