背景资料
我们有一些生成网络报告的lua代码。现在需要很长时间,因此在尝试简化某些逻辑时,我正在考虑创建一个临时表,然后将该临时表与另一个查询的结果相结合。
示例代码:
我在命令行上尝试了以下测试:
psql -U username -d databasename
DROP TABLE IF EXISTS TEMP1;
CREATE TABLE TEMP1 AS SELECT d_id, name as group, pname as param
FROM widgets
WHERE widget_id < 50;
SELECT count(*) from TEMP1;
\q
针对TEMP1表的选择显示正确的结果。
问题:
问题1 - 如何对此进行编码以确保一个报告请求不会破坏另一个报告请求?例如,如果人员A请求报告A并且在完成处理之前,人员B请求报告B ...将报告B创建的TEMP1 clobber为报告A创建的临时表吗? 这是将一切都放入交易的好理由吗?
问题2 - 运行上述的小测试后,我退出postgresql命令行....然后再次登录。 TEMP1还在。因此,当我完成时,我必须清理临时表。 我发现这篇文章: PostgreSQL temporary tables
这似乎表明在会话结束时会为你清理临时表...但这对我来说似乎没有用。不知道我做错了什么。
感谢。
答案 0 :(得分:1)
只需使用:
CREATE TEMPORARY TABLE temp1 AS ...
这解决了问题#1和#2,因为:
临时表位于会话专用的命名空间中,因此当并发会话对临时表使用相同的名称时,它引用不同的表,每个会话都有自己的表。
TEMP1
仍然存在,因为它不是暂时的。您希望将TEMPORARY
子句(或简称为TEMP
)添加到CREATE TABLE
语句中。