[英]creating postgresql temporary tables for search / reporting routine
背景資料
我們有一些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 ...將為報告A創建的臨時表使用報告B創建TEMP1緩沖區嗎? 這是將一切都放入交易中的一個很好的理由嗎?
問題2-運行上述小測試后,我退出了postgresql命令行....,然后再次登錄。 TEMP1還在附近。 因此,看來我必須在完成后清理臨時表。 我發現了這篇文章: PostgreSQL臨時表
這似乎表明在會話結束時臨時表已經為您清理了……但這似乎對我不起作用。 不知道我在做什么錯。
謝謝。
只需使用:
CREATE TEMPORARY TABLE temp1 AS ...
這解決了問題1和問題2,因為:
臨時表位於會話專用的名稱空間中,因此,當並發會話對臨時表使用相同的名稱時,它將引用不同的表,每個會話都有自己的表。
TEMP1
退出后仍然存在,因為它不是臨時的。 您想將TEMPORARY
子句(或簡稱TEMP
)添加到CREATE TABLE
語句中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.