postgresql create temp table 会阻止数据插入吗?
postgresql create temp table could block data insertion?
我在后端使用 postgresql 8.4。在后端我做了一个 postgres 函数来获取一些数据。该函数不会将任何数据写入数据库,因此只需从其他 table 读取数据。该函数在内部将创建一个临时 table 然后 return 一组记录。
当我监控服务器时,我发现这个函数正在阻止其他连接进行数据插入。
所以只是想知道创建临时文件 table 会阻止来自其他连接的数据插入吗?
进一步提问。我有一个函数 A,在这个函数里面有一个函数调用 B,函数 B 将 return 一组记录(记录有两列说 "name","email")。然后我需要函数 A 中的一个变量来保存来自函数 B 的数据 returned。当来自 B 的数据 returned 时,我将使用第一列做一些事情,然后将第二列用于其他工作人员。
所以目前我使用 temp table 来保存来自函数 B 的 returned 记录集。是否有另一种方法来保存 returned 记录?
发现这不确定是否有用:
https://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions
您应该避免创建此类函数,因为在多会话环境中,或者甚至只是使用来自同一用户会话的多行请求,服务器将尝试为每个创建临时 table用户会话 + 每个查询行。
由于多个请求需要创建相同的资源(您的临时 table)- 当然,服务器可以同时处理一个请求的一行。
详细了解 postgresql explicit-locking
考虑使用视图而不是创建临时文件 table。
P.S。您关于查询不写入任何数据,只是读取的说法是不正确的。 Query 在执行过程中实际上进行了 DDL 和 DML 操作。
我在后端使用 postgresql 8.4。在后端我做了一个 postgres 函数来获取一些数据。该函数不会将任何数据写入数据库,因此只需从其他 table 读取数据。该函数在内部将创建一个临时 table 然后 return 一组记录。
当我监控服务器时,我发现这个函数正在阻止其他连接进行数据插入。
所以只是想知道创建临时文件 table 会阻止来自其他连接的数据插入吗?
进一步提问。我有一个函数 A,在这个函数里面有一个函数调用 B,函数 B 将 return 一组记录(记录有两列说 "name","email")。然后我需要函数 A 中的一个变量来保存来自函数 B 的数据 returned。当来自 B 的数据 returned 时,我将使用第一列做一些事情,然后将第二列用于其他工作人员。 所以目前我使用 temp table 来保存来自函数 B 的 returned 记录集。是否有另一种方法来保存 returned 记录?
发现这不确定是否有用: https://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions
您应该避免创建此类函数,因为在多会话环境中,或者甚至只是使用来自同一用户会话的多行请求,服务器将尝试为每个创建临时 table用户会话 + 每个查询行。 由于多个请求需要创建相同的资源(您的临时 table)- 当然,服务器可以同时处理一个请求的一行。
详细了解 postgresql explicit-locking
考虑使用视图而不是创建临时文件 table。
P.S。您关于查询不写入任何数据,只是读取的说法是不正确的。 Query 在执行过程中实际上进行了 DDL 和 DML 操作。