Database 从数据库中检索大量数据的游标的替代方法是什么?

Database 从数据库中检索大量数据的游标的替代方法是什么?,database,postgresql,Database,Postgresql,通过搜索stackoverflow,我发现了大量谴责在数据库编程中使用游标的答案。然而,我真的不明白替代方案是什么 我正在创建一个程序,从数据库中读取大量行(数十万行),并将它们保存在内存中,以提高性能。我真的无法运行SELECT*FROM表并同时处理所有结果,对吗 我发现最好的方法是使用游标并以增量检索行,例如一次检索10行 有人能启发我吗?我在linux上使用PostgreSQL 9 谢谢看一看当您必须处理大量数据时,光标是最好的选择。你也可以使用限制。。抵消。。方法,但这将变得越来越慢,这

通过搜索stackoverflow,我发现了大量谴责在数据库编程中使用游标的答案。然而,我真的不明白替代方案是什么

我正在创建一个程序,从数据库中读取大量行(数十万行),并将它们保存在内存中,以提高性能。我真的无法运行SELECT*FROM表并同时处理所有结果,对吗

我发现最好的方法是使用游标并以增量检索行,例如一次检索10行

有人能启发我吗?我在linux上使用PostgreSQL 9


谢谢

看一看

当您必须处理大量数据时,光标是最好的选择。你也可以使用限制。。抵消。。方法,但这将变得越来越慢,这取决于数据量。PostgreSQL对游标没有任何问题,请在处理大量数据时使用它们


SQL Server在游标方面存在问题,MySQL无法处理存储函数之外的游标,这可能是某些dba不喜欢游标的原因。

您可以直接使用for循环using record:

do
$$
declare r record;

begin

    for r in select product_id, name from products loop
        raise notice '% %', r.product_id, r.jname;
    end loop;

end$$

我认为最好的方法是使用
COPY
直接将所需数据获取到客户端应用程序


我在使用游标时也没有任何问题。据我所知,游标正在为您保存数据的快照,正式而言,它(和
复制
)是翻阅结果的唯一正确方法,否则在使用
限制时。偏移量
可能会导致不一致,因为新插入的记录会更改偏移量

很少需要光标。如果您的逻辑随着前一行的更新而改变,那么您可能需要一个光标

你真的需要为你的问题打开一个光标吗?你能详细说明你想做什么吗?大型数据集是避免使用游标的一个很好的理由,而不是使用游标的理由

您应该尝试进行基于集合的处理。只需定期更新表,使用连接和where过滤器即可


一个简单的更新能否取代光标循环?

如果您只是下载数据,为什么不使用select?一次拉取10行不会节省任何内存,因为您的缓存都在内存中


我遗漏了什么吗?

我不想更新数据。出于性能原因,我希望将它们保存在数据结构的内存中。所以我想将它们从数据库批量传输到进程。有没有光标替代?