PL / PgSQL存储多个记录进行处理

时间:2014-01-07 12:41:16

标签: postgresql plpgsql

在PL / PgSQL中 - 我可以从查询结果中一次循环一个记录。如何保留这组检索到的记录以供以后处理。因为我将无法再次检索。有没有办法做到这一点?像RECORDS一样? (我正在使用postgres 8.3)

1 个答案:

答案 0 :(得分:1)

PL / PgSQL在程序的生命周期之外没有持久存储。

在一个过程中你可以使用一组记录,但在PostgreSQL中附加到数组的效率非常低 - 它会产生一个数组的副本。因此,逐个追加n个记录是非常昂贵的 - 我认为在O(n log n)和O(n ^ 2)之间。使用行类型的数组来存储你想要记住的行可能是一个糟糕的想法。

您最好的选择是CREATE TEMPORARY TABLE存储记录,然后INSERT将它们存储到临时表中。在旧的PostgreSQL版本中,PL / PgSQL中的临时表存在一些问题,但我认为 Pg 8.3是第一个修复它们的版本,所以你应该没问题。虽然没有命名空间,但是你的程序的重入(嵌套)执行会出现问题,因为第二个会尝试创建一个已经存在的临时表。

BTW,8.3已经过时且不受支持。开始计划升级。