2

In Postgres, is a WITH clause creating a temporary table and if so can it be used in multiple threads safely ?

I.e. WITH x below, would this be ok if the CTE running in multiple different threads?

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.*;
4

1 回答 1

0

不。

带有 CTE 的查询会创建一个表的内部临时表示,该表仅对查询本身可见。

我也看不到TEMPORARY在多个线程中使用表的方法,因为临时表仅在同一会话中可见。

下一个最好的东西是一张UNLOGGED桌子。仍然比普通桌子便宜,但不如上述任何一种便宜。

与 CTE 不同,您可以创建索引和ANALYZE TEMPORARY/或UNLOGGED表 - 这可能对巨大的基数有很大帮助,但对您的示例 ( )LIMIT 1没有帮助。

于 2013-08-05T18:46:08.743 回答