使用node-postgres插入和删除多个记录

时间:2018-11-02 04:28:20

标签: javascript node.js postgresql node-postgres

您对使用INSERT的多个记录中的DELETEnode-postgres有何看法。我对此线程进行了一些指导: https://github.com/brianc/node-postgres/issues/957

但是我不确定我的代码是否遵循最佳方法。

添加多条记录(具有多行)并使用TRANSACTION

try{
  const data = [[1,1],[1,2],[1,5]];
  const values1 = []; //[1,1,1]
  const values2 = []; //[1,2,5]

  data.map((element)=>{
      values1.push(element[0]);
      values2.push(element[1]);
  })

  //transaction
  await client.query('BEGIN');
  const text = `INSERT INTO user_role (id_user, id_role) SELECT * FROM UNNEST ($1::int[], $2::int2[])`;
  const values = [value1,value2]
  const { rows } = await client.query(text,values);
  await client.query('COMMIT');
  ...
}
catch{
  await client.query('ROLLBACK');
  ...
}

删除多条记录(使用多行)并使用TRANSACTION

try {
  const data = [[1,1],[1,2],[1,5]];
  const values1 = []; //[1,1,1]
  const values2 = []; //[1,2,5]

  data.map((element)=>{
      values1.push(element[0]);
      values2.push(element[1]);
  })

  const text = `DELETE FROM users WHERE (id_user,role) IN (SELECT * FROM (UNNEST($1::int[],$2::int[]))`;
  const values = [values1,values2];
  //transaction
  await client.query('BEGIN');
  const { rows } = await client.query[text, values];
  await client.query('COMMIT');
  ...
}
catch{
  await client.query('ROLLBACK');
  ...
}

0 个答案:

没有答案