我想选择一组行并将其返回给客户端,但是我也想将结果集中的主键(整数ID)插入临时表中,以供以后在同一事务中使用。
这是用于同步的,其中后续查询倾向于将早期查询结果中的联接包括在内。
最有效的方法是什么?
我不愿执行两次查询,尽管如果将它添加到查询缓存中可能会很快。一种替代方法是将整个结果集存储到临时表中,然后再从临时表中进行选择。这似乎也很浪费(我只需要临时表中的整数id。)如果有一个SELECT INTO TEMP也返回了结果,我会很高兴。
当前,所使用的技术是在客户端构造整数ID的数组,并在随后的IN查询中使用该数组。我希望有一些更有效的方法。
我猜它可以用存储过程来完成吗?但是有没有办法吗?
我认为您可以使用Postgres功能来做到这一点,该功能允许CTE中的数据修改步骤。使用此功能的更常见的原因是,例如,删除表的记录,然后将它们插入日志表。但是,它可以适用于此目的。这是一种可能的方法(我手头没有Postgres对此进行测试):
with q as (
<your query here>
),
t as (
insert into temptable(pk)
select pk
from q
)
select *
from q;
通常,您将returning
子句与数据修改查询一起使用,以捕获要修改的数据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句