postgresql 如何使用Node-Postgres通过选择插入

fhity93d  于 2022-12-18  发布在  PostgreSQL
关注(0)|答案(2)|浏览(108)

在SQL中使用postgressql时,这是一个有效的查询,将SELECT嵌入到INSERT -

INSERT INTO minute_registers_main_values (registers_id, t, v, i, w, pf, f) 
(
  SELECT id AS registers_id, '2015-09-01T16:34:02', 1.0, 9.1, 5.4, 1.3, 60.01 
  FROM registers WHERE main=TRUE AND cnt=0 AND hub_serial='ni1uiv'
);

我可以通过在Insert上执行Select Lookup来插入外键,而不必先查找其他ID。
在node-postgres中,为了一次插入多个查询,我使用了pg-format。

const register_categoriesInsert = `
      INSERT INTO register_categories (register_id, category_id) VALUES %L
    `;

    await client.query(format(register_categoriesInsert, solar_ids.concat(main_ids).concat(all_other_ids)),[], (err, result)=>{
      console.log(err);
      console.log(result);
    });

这允许你在一个查询调用中一次插入很多值,尽管我对pg-format有疑问--它似乎没有使用参数化。
我尝试执行大量的插入操作,并利用在INSERT中使用SELECTS的优势。
我可以使用node-postgres来完成这个任务吗?

kd3sttzy

kd3sttzy1#

上面的伯奇是对的。

INSERT INTO minute_registers_main_values (registers_id, t, v, i, w, pf, f) 
  (
    SELECT id AS registers_id, $1, $2, $3, $4, $5, $6 
    FROM registers WHERE main=$7 AND cnt=$8 AND hub_serial=$9
  );

可以发送到具有多维参数数组的client.query中

nwnhqdif

nwnhqdif2#

我有一个类似的问题,谢谢d36williams的回答,这帮助了我。对于其他任何人有这个问题。这是我的解决方案。

// INSERT
              const newEmailRecord = {
                text: 'INSERT INTO email(col1, col2, col3, col4, col5, col6, col7) (SELECT $1, $2, prov_first_name AS col3, prov_email AS col4, $3, $4, $5 FROM provider WHERE prov_id=($6))',
                values:[ var1, var2, var3, var4, var5, var6ProvId],
              }
  
              await client.query(newEmailRecord);

相关问题