我想选择一组行并将它们返回给客户端,但我还想将结果集中的主键(整数id)插入到临时表中,以便在同一事务中的后续连接中使用
这是用于同步的,后续查询往往涉及对先前查询的结果的连接。
最有效的方法是什么?
我很谨慎地执行两次查询,但如果它被添加到查询缓存中可能会很快。另一种方法是将整个结果集存储到临时表中,然后从临时表中进行选择。这看起来也很浪费(我只需要临时表中的整数id。)如果有一个SELECT INTO TEMP也返回了结果,我会很高兴。
目前使用的技术是在客户端构造一个整数id的数组,并在随后的IN查询中使用它。我希望有更高效的东西。
我猜这可以用存储过程完成吗?但是没有这种方法吗?
答案 0 :(得分:7)
我认为您可以使用Postgres功能执行此操作,该功能允许在CTE中执行数据修改步骤。例如,使用此功能的更典型的原因是删除表的记录,然后将它们插入到日志表中。但是,它可以适应这个目的。这是一种可能的方法(我手头没有Postgres来测试这个):
with q as (
<your query here>
),
t as (
insert into temptable(pk)
select pk
from q
)
select *
from q;
通常,您将returning
子句与数据修改查询一起使用,以捕获正在修改的数据。