gpt4 book ai didi

postgresql - 为重复的 SPI 调用重置顺序扫描位置

转载 作者:行者123 更新时间:2023-11-29 13:33:36 24 4
gpt4 key购买 nike

我正在使用 SPI Postgres 游标来获取数据。它看起来像这样:

 SPI_connect();
snprintf(sql, sizeof(sql), "SELECT * FROM %s;", dataTableName);
cursorPlan = SPI_prepare(sql, 0, NULL);
cursorPortal = SPI_cursor_open(NULL, cursorPlan, NULL, NULL, 1);
SPI_cursor_fetch(cursorPortal, direction, CURSOR_BUFFER_SIZE);

在获取之前我执行

select * from coords4_1 limit 5;

得到

         x         |         y
-------------------+-------------------
-138.272695243359 | -185.774616431445
-170.132300350815 | 35.1918349042535
148.739065974951 | 213.159712031484
105.91473756358 | -375.821752008051
418.450653553009 | -69.8341866955161

然后我开始抓取。表很大,所以由于某些原因我中断了获取。

我执行

select * from coords4_1 limit 5;

再次得到

231.340305414051 -443.616589065641
65.2282955124974 412.122126668692
434.384567663074 63.0593989044428
-19.7921730577946 -223.832104355097
-122.094649355859 467.992015648633

此查询在 psql 和程序调用中返回相同的结果。需要重新启动服务器才能再次获得第一个结果。

表格光标似乎停在了表格的某个地方。我知道不能保证 SELECT 查询结果序列。是否可以在不重启服务器的情况下重新初始化表游标?

最佳答案

select * from coords4_1 limit 5;

这里没有 ORDER BY 子句,所以您是在告诉服务器“给我您想要的五个结果”。

出于实现细节的原因,PostgreSQL 通常按大致顺序返回表内容。这是因为同步扫描代码。不能保证这一点,任何依赖它的代码都会完全损坏。

添加一个 ORDER BY 子句,或 use a real cursor如果你想要类似光标的行为。

关于postgresql - 为重复的 SPI 调用重置顺序扫描位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18323066/

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