在PostgreSQL中删除临时表?

时间:2018-06-26 17:34:02

标签: postgresql

对是否应该删除临时表严格出于声明它们所使用的功能的疑问? PostgreSQL的新手,尚未找到有关该主题的太多信息。我知道以下事实:在SQL中,这是自动处理的,但肯定MS SQL和postgreSQL有它们的区别。从根本上删除函数中声明的临时表,您认为最佳实践是什么?

1 个答案:

答案 0 :(得分:1)

对于MS和Pg,它们有些不同。 Ms特别对待在SP中创建的本地临时表-drops on the completion of the procedure Postgres不会currently support GLOBAL临时表(在create语句中指定忽略它)

  

(可选)可以在TEMPORARY或TEMP之前写入GLOBAL或LOCAL。   目前,这在PostgreSQL中没有区别,已弃用;

我想说的是,最佳实践并不十分适用。在会话持续时间内保留临时表是可以的(它们将在末尾删除)。但是通常您更希望使用ON COMMIT DROP在事务结束之后而不是会话之后删除表...如果无尽会话对于postgres来说是可以的,那么无尽事务对于MVCC和锁定等等也可以。您可能想研究ways to fight it ...

总结:经常将临时表保留到会话结束,而更“正常”的做法是将临时表保留到事务结束。 Postgres不特别处理在fn()中创建的临时表。 Postgres没有GLOBAL临时表。根据您编写和编写的代码,您可能需要删除或保留temp table自动删除。注意会话/事务池的特殊性。