如何在同一会话的过程中删除临时表。
因为我在 Postgres Sql 中遇到了临时表的问题。如果两个程序:
A() 有一个临时表说 temp(id, name) B() 有一个临时表说 temp(id, name, address) 然后如果首先调用过程 A,然后调用过程 B,那么临时表仍然存在使用过程 A 中定义的结构,即 temp(id, name),反之亦然,并且找不到过程 B 中定义的“地址”列。
如何在同一会话的过程中删除临时表。
因为我在 Postgres Sql 中遇到了临时表的问题。如果两个程序:
A() 有一个临时表说 temp(id, name) B() 有一个临时表说 temp(id, name, address) 然后如果首先调用过程 A,然后调用过程 B,那么临时表仍然存在使用过程 A 中定义的结构,即 temp(id, name),反之亦然,并且找不到过程 B 中定义的“地址”列。
PostgreSQL 不支持过程级临时表,所以你不能这样做。
Pg 中临时表的使用与其他数据库略有不同。在您的情况下,您必须使用不同的名称。
临时表是会话范围的。这意味着同一个会话可以在过程调用和 SQL 调用中看到它。基本上,临时表对您的会话来说是全局的。
所以你的选择是假设A调用B:
调用过程 A 并在 A 中创建临时表并用它做你想做的事。在过程 A 结束时删除临时表。从 A 调用 B,您现在可以在 B 内部创建具有相同名称的临时表并使用它。作为一个好习惯,一旦你完成了它,就明确地删除临时表。
否则为临时表使用两个不同的名称。
http://www.postgresql.org/docs/9.2/static/sql-createtable.html "TEMPORARY 或 TEMP 如果指定,则表创建为临时表。临时表在会话结束时自动删除,或可选地在当前事务结束时(参见下面的 ON COMMIT)。当临时表存在时,具有相同名称的现有永久表对当前会话不可见,除非它们使用模式限定名称引用。在临时表也自动成为临时表。”