Node.js 和 Postgres:链式查询中的临时 table "relation does not exist"

Node.js and Postgres: Temporary table "relation does not exist" on chained query

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

  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 命中它时,我得到 "relation \"temp1\" does not exist",但所有后续调用都成功并且有 return 数据。为什么会这样?在执行 SELECT

之前,我正在等待第一个查询完成

临时表特定于一个会话,单独的 db.query() 调用不能保证在同一会话中 运行,因为 db 是一个单独获取客户端的池对于每个 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();
  }
});

另请注意,.catch((err) => { throw err; }) 不会执行任何操作。