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