如何在同一會話的過程中刪除臨時表。在單個會話中刪除臨時表
因爲我正面臨有關Postgres Sql臨時表的問題。如果兩個程序:
A(),具有一個臨時表說臨時有一個臨時表(ID,姓名) B()說溫度(ID,姓名,地址) 那麼如果程序A被稱爲第一後那麼程序B被調用,那麼臨時表保持在過程A中定義的結構即temp(id,name),反之亦然,並且找不到過程B中定義的列「address」。
如何在同一會話的過程中刪除臨時表。在單個會話中刪除臨時表
因爲我正面臨有關Postgres Sql臨時表的問題。如果兩個程序:
A(),具有一個臨時表說臨時有一個臨時表(ID,姓名) B()說溫度(ID,姓名,地址) 那麼如果程序A被稱爲第一後那麼程序B被調用,那麼臨時表保持在過程A中定義的結構即temp(id,name),反之亦然,並且找不到過程B中定義的列「address」。
臨時表是會話作用域。這意味着同一個會話可以通過過程調用和SQL調用來看到它。基本上臨時表對於你的會話是全局的。
那麼你的選擇是這個假設A調用B:
呼叫過程的和A中創建臨時表,做你想做的事情是什麼。在過程A結束時,刪除臨時表。從A中調用B,現在可以在B中創建具有相同名稱的臨時表並利用它。作爲一個好習慣,一旦你完成了它,就會明確地刪除臨時表。
否則對臨時表使用兩個不同的名稱。
http://www.postgresql.org/docs/9.2/static/sql-createtable.html 「TEMPORARY或TEMP 如果指定,表創建爲臨時表。臨時表自動刪除在會話的結尾,或任選地在當前事務結束時(見COMMIT下面)當臨時表存在時,對於當前會話來說,具有相同名稱的現有永久表是不可見的,除非它們被模式限定的名稱引用,在臨時表上創建的任何索引也是自動臨時的。
PostgreSQL不支持過程級臨時表,所以你不能這樣做。
在Pg中臨時表的用法與其他數據庫中的稍有不同。在你的情況下,你必須使用不同的名字。
如果我使用提交下拉,那麼它是否有效,或者是否有其他選擇。 – ripunj2408813
如果你永遠不會從A或B中調用A,那麼它可以工作,但這通常是個壞主意。 –
是的程序A和B是相互獨立的,爲什麼這個想法是不好的? – ripunj2408813
如果你的程序調用在不同的事務中,你可以使用transectiona級別的臨時表。 –