为搜索/报告例程创建postgresql临时表

时间:2014-06-10 17:29:33

标签: sql postgresql lua temporary

背景资料

我们有一些生成网络报告的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

这似乎表明在会话结束时会为你清理临时表...但这对我来说似乎没有用。不知道我做错了什么。

感谢。

1 个答案:

答案 0 :(得分:1)

只需使用:

CREATE TEMPORARY TABLE temp1 AS ...

这解决了问题#1和#2,因为:

  1. 临时表位于会话专用的命名空间中,因此当并发会话对临时表使用相同的名称时,它引用不同的表,每个会话都有自己的表。

  2. 退出后,
  3. TEMP1仍然存在,因为它不是暂时的。您希望将TEMPORARY子句(或简称为TEMP)添加到CREATE TABLE语句中。