gpt4 book ai didi

java - Postgresql SETOF 与 Refcursor

转载 作者:行者123 更新时间:2023-11-29 12:30:02 38 4
gpt4 key购买 nike

我在 Postgresql 中有一个基本的用户表,

CREATE TABLE myuser (
userId bigserial primary key,
user_name varchar(32),
password varchar(32)
);

我想要一个存储过程来检索这些数据。查看此处的文档:posgresql call proc我发现我基本上有 2 个不同的选择。

  1. 返回一个 SETOF myuser
  2. 返回一个包含我想要的数据的refcursor

我正在使用 Java,我想知道哪个更快和/或更好。两者在功能上有什么区别?我看起来唯一的区别是我如何设置我的 Java CallableStatement,但我为什么要选择一个而不是另一个?

最佳答案

游标和记录集之间的主要区别是可以使用游标控制数据传输到客户端。当您处理应该从服务器移动到客户端的非常大的数据时,游标很有用。如果没有游标,PostgreSQL 会立即将所有数据推送到客户端内存 - 它很快(总时间,但开始时间与总时间相同,并且可能需要大量内存(用于更大的数据))。使用游标,您可以控制从服务器到客户端可以获取多少行(总时间通常更长,但开始时间可以(不一定是 - 取决于更多因素)很短。

-- classic querySELECT * FROM generate_series(1,100000);-- 100000 rows is pushed to client at once -- less network handshaking, more client memory consumption-- cursors - more network handshaking, -- controlled memory consumption on client sideBEGIN;DECLARE xx CURSOR FOR SELECT * FROM generate_series(1,1000000);FETCH 100 FROM xx; -- read 100 rows from server to clientFETCH 100 FROM xx; -- read next 100 rows from server to client...COMMIT;

关于java - Postgresql SETOF 与 Refcursor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18300955/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com