Node.js和Postgres:链式查询

时间:2018-01-03 00:04:13

标签: sql node.js postgresql node-postgres

我正在尝试创建一个临时表,然后使用node-pg库对其执行SELECT查询。使用promises和.then(),我等待创建表(或者看起来应该是这样),然后执行我的选择查询:

  const tempText = `
    CREATE TEMPORARY TABLE IF NOT EXISTS temp1 AS
    (
      SELECT colA, colB
      FROM foo
      GROUP BY colA, colB
    )
  `;

  const queryText = `
    SELECT colA, COUNT(colA) as total
    FROM temp1
    GROUP BY colA
    ORDER BY COUNT(colA) DESC
  `;
  // using pooling
  return db.query({ text: tempText, values })
    .then(() => {
      return db.query(queryText).then(({ rows }) => rows);
    })
    .catch((err) => { throw err; });

此代码全部存在于GraphQL解析器中。问题是,我第一次通过API命中它时,我得到“关系”temp1 \“不存在”,但所有后续调用都成功并返回数据。为什么会这样?我正在等待第一个查询完成SELECT

之前

1 个答案:

答案 0 :(得分:3)

临时表特定于会话,并且不保证单独的db.query()调用在同一会话中运行,因为db是一个为每个{{1}分别获取客户端的池打电话。明确地抓住客户:

query()

另请注意return db.connect().then(async client => { try { await client.query({ text: tempText, values }); const result = await client.query(queryText); return result.rows; } finally { client.release(); } }); 没有做任何事情。