在this SO Answer about PostgreSQL and Temp tables中,他们这样描述临时表:
它只在当前 * 会话 * 中可见,并在会话结束时死亡。当使用ON COMMIT DROP创建时,它会在 transaction 结束时死亡。
给定一个类似这样的示例SQL:
CREATE TEMP TABLE temp1 AS
SELECT dataid
, register_type
, timestamp_localtime
, read_value_avg
FROM rawdata.egauge
WHERE register_type LIKE '%gen%'
ORDER BY dataid, timestamp_localtime;
这是否意味着我可以有一个查询,是运行多次 * 在同一时间 * 和每个查询运行..它有自己的范围。会有它自己的副本/版本 * 它的临时表?因此,query_1的临时表不会与query_2的临时表混淆,如果两者“同时”运行。
例如:
20个人“同时”请求同一个网页。然后,Web服务器对每个请求执行相同的查询,这意味着同时运行20个查询。(当然,每个请求的数据可能不同。等等)。
我的理解是否正确?有没有办法用pgAdmin 4测试一下?
1条答案
按热度按时间83qze16e1#
根据文档Create Table
临时表存在于一个特殊的模式中,因此在创建临时表时不能给出模式名称。
使用psql
这可能不是你所看到的。问题是Postgres可能已经创建了一些临时模式,以预期在其中创建临时表。否则,它将按需创建它们。
因此,正如您所看到的,每个临时表都有自己的命名空间(模式),这就是每个会话/事务如何在自己的表版本上操作。为了证明这一点:
另外,如果另一个会话创建了该表,会发生什么情况。
创建另一个
pg_temp_*
模式来保存它。