postgresql创建临时表可以阻止数据插入吗?

时间:2017-06-10 23:44:44

标签: postgresql postgresql-8.4

我在后端使用postgresql 8.4。在后端我做了一个postgres函数来获取一些数据。该函数不会将任何数据写入DB,因此只需从其他表中读取数据。内部函数将创建临时表,然后返回一组记录。

当我监控服务器时,我发现这个功能阻止了其他连接进行数据插入。

所以只是想知道创建临时表是否会阻止来自其他连接的数据插入?

进一步的问题。我有一个函数A,在这个函数里面有一个函数调用B,函数B将返回一组记录(该记录有两列说" name"," email") 。然后我需要一个函数A中的变量来保存从函数B返回的数据。当从B我返回的数据将使用第一列做某事时,然后将第二列用于其他人员。 所以目前我使用临时表来保存函数B中返回的setof记录。还有另一种方法来保存返回的记录吗?

发现这不确定是否有帮助: https://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions

1 个答案:

答案 0 :(得分:1)

你应该避免创建这样的函数,如在多会话环境中,或者甚至只是使用来自同一用户会话的多行请求,服务器将尝试为每个用户会话创建临时表+每个查询行。 由于多个请求需要创建相同的资源(临时表) - 当然,服务器可以同时处理一个请求中的一行。

详细了解postgresql explicit-locking

考虑使用视图而不是创建临时表。

P.S。您的查询不会写任何数据,只是读取,这是不正确的。查询实际上在执行期间执行DDL和DML操作。