Как вставить несколько строк с помощью 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]);
            }

Есть какая-то ошибка/фатальное исключение, но я ее не вижу, потому что домен ошибки завернут.


person Rahul Iyer    schedule 11.10.2017    source источник
comment
Для этого вам абсолютно необходимо использовать один запрос на вставку. Вот пример: stackoverflow.com/questions/ 37300997/   -  person vitaly-t    schedule 11.10.2017


Ответы (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)
person Vao Tsun    schedule 11.10.2017