4

我的目标是实现将数据块从数据库复制到 C 函数中以进行处理并作为查询结果返回的最高性能。

我是 PostgreSQL 新手,目前正在研究移动数据的可能方法。具体来说,我正在寻找与 PostgreSQL 相关的细微差别或关键字,以快速移动大数据。

注意: 我的最终目标是速度,所以我愿意接受我所提出的确切问题之外的答案,只要它获得大的性能结果。例如,我遇到过 COPY 关键字(仅限 PostgreSQL),它可以快速将数据从表移动到文件;反之亦然。我试图远离数据库外部的处理,但如果它提供的性能改进超过了外部处理的明显缺点,那就这样吧。

4

1 回答 1

4

听起来您可能想使用服务器编程接口 (SPI)将存储过程实现为在 PostgreSQL 后端内运行的C 语言函数。

用于SPI_connect设置 SPI。

现在SPI_prepare_cursor一个查询,然后SPI_cursor_open它。SPI_cursor_fetch从它和SPI_cursor_close它完成时的行。请注意,这SPI_cursor_fetch允许您获取成批的行。

SPI_finish完成后清理。

您可以在生成结果行时将它们返回到元组存储中,从而避免在内存中构建整个表。请参阅 PostgreSQL 源代码中任何集合返回函数中的示例。您可能还想查看SPI_returntuple辅助函数。

另请参阅:C 语言函数扩展 SQL

如果对最大速度感兴趣,您的客户端可能希望通过libpqtypes使用 libpq 二进制协议,以便它以最小的开销接收由您的服务器端使用 SPI 的过程生成的数据。

于 2012-11-06T00:10:47.180 回答