我正在尝试创建一个临时表,然后使用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
答案 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();
}
});
没有做任何事情。