【问题标题】:creating postgresql temporary tables for search / reporting routine为搜索/报告例程创建 postgresql 临时表
【发布时间】:2014-06-10 17:29:32
【问题描述】:

背景信息

我们有一些生成网络报告的 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 会破坏为报告 A 创建的临时表吗? 这是将所有内容都放入交易的好理由吗?

问题 2 - 运行上述我的小测试后,我退出 postgresql 命令行....然后再次登录。 TEMP1 还在。所以看起来我完成后必须清理临时表。 我找到了这篇文章: PostgreSQL temporary tables

这似乎表明在会话结束时会为您清理临时表......但这似乎对我不起作用。不知道我做错了什么。

谢谢。

【问题讨论】:

    标签: sql postgresql lua temporary


    【解决方案1】:

    只需使用:

    CREATE TEMPORARY TABLE temp1 AS ...
    

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

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

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

    【讨论】:

      猜你喜欢
      • 2022-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 2013-11-30
      • 2012-04-23
      • 1970-01-01
      相关资源
      最近更新 更多