WITH创建临时表,如果可以,它可以安全地在多个线程中使用吗?

时间:2013-08-05 17:19:55

标签: sql multithreading postgresql with-statement

在Postgres中,是一个创建临时表的WITH子句,如果是这样,它可以安全地在多个线程中使用吗?

即。如果CTE在多个不同的线程中运行,那么下面的x是否正常?

WITH x AS (
   SELECT  psp_id
   FROM    global.prospect
   WHERE   status IN ('new', 'reset')
   ORDER   BY request_ts
   LIMIT   1
   )
UPDATE global.prospect psp
SET    status = status || '*'
FROM   x
WHERE  psp.psp_id = x.psp_id
RETURNING psp.*;

1 个答案:

答案 0 :(得分:0)

没有

使用CTE的查询创建一个表的内部临时表示,该表对查询本身是唯一可见的。

我也没有办法在多个线程中使用TEMPORARY表,因为临时表只在同一个会话中可见。

下一个最好的事情是UNLOGGED table。比普通餐桌还便宜,但不如上述任何一种便宜。

与CTE不同,您可以创建索引和ANALYZE TEMPORARYUNLOGGED表格 - 这可能会帮助很多具有巨大的基数但不是用你的例子(LIMIT 1)。