Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 在单个会话中删除临时表_Database_Postgresql_Temp Tables_Procedures - Fatal编程技术网

Database 在单个会话中删除临时表

Database 在单个会话中删除临时表,database,postgresql,temp-tables,procedures,Database,Postgresql,Temp Tables,Procedures,如何在同一会话的过程中删除临时表 因为我在PostgresSQL中面临一个关于临时表的问题。如果有两种程序: 有一个临时表,比如temp(id,name) B()有一个临时表,比如temp(id、name、address) 然后,如果先调用过程A,然后调用过程B,则临时表将保留过程A中定义的结构,即temp(id,名称),反之亦然,并且找不到过程B中定义的列“address”。PostgreSQL不支持过程级临时表,因此您无法执行此操作 在Pg中使用临时表与在其他db中使用临时表略有不同。在您的

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

因为我在PostgresSQL中面临一个关于临时表的问题。如果有两种程序:

有一个临时表,比如temp(id,name) B()有一个临时表,比如temp(id、name、address)
然后,如果先调用过程A,然后调用过程B,则临时表将保留过程A中定义的结构,即temp(id,名称),反之亦然,并且找不到过程B中定义的列“address”。

PostgreSQL不支持过程级临时表,因此您无法执行此操作


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

PostgreSQL不支持过程级临时表,所以您不能这样做


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

临时表是会话范围。这意味着同一个会话可以跨过程调用和SQL调用看到它。基本上,临时表是会话的全局表

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

  • 调用过程A并在中创建临时表,然后对其执行所需操作。在程序A结束时,放下临时表。从A调用B,现在可以在B内部创建具有相同名称的临时表并使用它。作为一个好习惯,一旦完成临时表,就显式地删除它

  • 否则,请为临时表使用两个不同的名称

  • “临时或临时
    如果指定,该表将作为临时表创建。临时表将在会话结束时自动删除,或者在当前事务结束时(可选)自动删除(请参见下面的“提交时”)。当临时表存在时,具有相同名称的现有永久表对当前会话不可见,除非它们使用架构限定名称引用。在临时表上创建的任何索引也将自动临时。“

    临时表是会话范围。这意味着同一个会话可以跨过程调用和SQL调用看到它。基本上,临时表是会话的全局表

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

  • 调用过程A并在中创建临时表,然后对其执行所需操作。在程序A结束时,放下临时表。从A调用B,现在可以在B内部创建具有相同名称的临时表并使用它。作为一个好习惯,一旦完成临时表,就显式地删除它

  • 否则,请为临时表使用两个不同的名称

  • “临时或临时
    如果指定,该表将作为临时表创建。临时表将在会话结束时自动删除,或者在当前事务结束时(可选)自动删除(请参见下面的“提交时”)。当临时表存在时,具有相同名称的现有永久表对当前会话不可见,除非它们使用架构限定名称引用。在临时表上创建的任何索引也将自动临时。“

    如果您的过程调用在不同的事务中,您可以使用transectiona级别的临时表。如果您的过程调用在不同的事务中,您可以使用transectiona级别的临时表。如果我使用的是on commit drop,则它是否有效,或者是否有其他替代方法。如果您永远不会从B调用A或从A调用B,然后它可以工作,但通常这是个坏主意。是的,过程A和B彼此独立,为什么这个主意不好?A)很难确定,所以A和B总是独立调用-这是应用程序中的一些其他期望(这是我个人的选择。我不喜欢隐藏的依赖项)。b) 重复创建和删除临时表会增加系统表中的流量,并且每次调用都会丢失缓存的执行计划。pg中临时表的最佳用途是创建一个临时表,当临时表不存在时,在使用前删除内容,当临时表存在时(在过程开始时),如果我在提交时使用,则临时表有效或无效,或者是否有其他替代方法。如果您永远不会从B调用A或从A调用B,则临时表可以工作,但这通常是个坏主意。是的,过程A和过程B彼此独立,为什么这个主意不好?A)很难确定,所以A和过程B总是独立调用-这是应用程序中的其他期望(这是我个人的选择。我不喜欢隐藏的依赖项)。b) 重复创建和删除临时表会增加系统表中的流量,并且每次调用都会丢失缓存的执行计划。pg中临时表的最佳用途是在不存在时创建一个临时表,并在存在时(在过程开始时)在使用前删除内容