簡體   English   中英

創建用於搜索/報告例程的postgresql臨時表

[英]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,因為:

  1. 臨時表位於會話專用的名稱空間中,因此,當並發​​會話對臨時表使用相同的名稱時,它將引用不同的表,每個會話都有自己的表。

  2. TEMP1退出后仍然存在,因為它不是臨時的。 您想將TEMPORARY子句(或簡稱TEMP )添加到CREATE TABLE語句中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM