2017-10-11 127 views
1

这是我的发言:如何使用node-postgres插入多行?

INSERT INTO userpermissions (username, permission) 
VALUES ($1, $2),($3,$4) 
RETURNING *; 

这是我的代码:

db.query(stmt2,values2, (err2, result2) => { 
     //Do other stuff depending on if there is an error or result 
} 

其中stmt2,是上面的语句,并且values2是我做创建磁盘阵列:

  var values2 = []; 
      for(i=0;i<permissions.length;i++){ 
       values2.push(username); 
       values2.push(permissions[i]); 
      } 

有某种错误/致命异常,但我看不到它,因为错误的域被包装。

+0

你绝对我应该使用单个插入查询。这里有一个例子:https://stackoverflow.com/questions/37300997/multi-row-insert-with-pg-promise –

回答

1

SQL:

f=# create table tt(i int,t text); 
CREATE TABLE 
f=# grant all on tt to t; 
GRANT 

JS:

const { Pool, Client } = require('pg') 

const client = new Client({ 
    user: 't', 
    host: '10.10.10.10', 
    database: 'f', 
    password: 't', 
    port: 5432 
}) 
client.connect() 

client.query('INSERT INTO tt(i, t) VALUES($1, $2),($3,$4) RETURNING *', ['1', 'SO',2,'sO'], (err, res) => { 
    console.log(err, res) 
    client.end() 
}) 

运行:

C:\Users\Vao\vatest>node t.js 
null Result { 
    command: 'INSERT', 
    rowCount: 2, 
    oid: 0, 
    rows: [ anonymous { i: 1, t: 'SO' }, anonymous { i: 2, t: 'sO' } ], 
    fields: 
    [ Field { 
     name: 'i', 
     tableID: 131471390, 
     columnID: 1, 
     dataTypeID: 23, 
     dataTypeSize: 4, 
     dataTypeModifier: -1, 
     format: 'text' }, 
    Field { 
     name: 't', 
     tableID: 131471390, 
     columnID: 2, 
     dataTypeID: 25, 
     dataTypeSize: -1, 
     dataTypeModifier: -1, 
     format: 'text' } ], 
    _parsers: [ [Function: parseInteger], [Function: noParse] ], 
    RowCtor: [Function: anonymous], 
    rowAsArray: false, 
    _getTypeParser: [Function: bound ] } 

最后检查:

f=# select * from tt; 
i | t 
---+---- 
1 | SO 
2 | sO 
(2 rows)