在单个会话中删除临时表

时间:2013-05-22 09:27:15

标签: database postgresql temp-tables procedures

如何在同一会话的过程中删除临时表

因为我在Postgres Sql中遇到有关临时表的问题。如果有两个程序:

有临时表的A()说temp(id,name) 有临时表的B()说temp(id,name,address) 然后,如果首先调用过程A并且在调用过程B之后,则临时表保留结构,即过程A中定义的temp(id,name),反之亦然,过程B中定义的列“address”是没找到。

2 个答案:

答案 0 :(得分:1)

PostgreSQL不支持程序级临时表,所以你不能这样做。

Pg中临时表的使用与其他db中的略有不同。在您的情况下,您必须使用不同的名称。

答案 1 :(得分:0)

临时表是会话范围的。这意味着相同的会话可以跨过程调用和SQL调用查看它。基本上,临时表对于您的会话来说是全局的。

所以你的选择是假设A调用B:

  1. 调用程序A并在A中创建临时表并使用它执行所需的操作。在过程A结束时删除临时表。从A调用B,您现在可以在B中创建具有相同名称的临时表并使用它。作为一个好习惯,一旦完成它就明确地删除临时表。

  2. 否则为临时表使用两个不同的名称。

  3. http://www.postgresql.org/docs/9.2/static/sql-createtable.html “TEMPORARY或TEMP 如果指定,则将表创建为临时表。临时表在会话结束时自动删除,或者可选地在当前事务结束时删除(请参阅下面的ON COMMIT)。当临时表存在时,当前会话不会显示具有相同名称的现有永久表,除非它们使用模式限定名称引用。在临时表上创建的任何索引也是自动临时的。“