OPENQUERY throwing "Out of memory" error: limit rows until all are loaded

OPENQUERY throwing "Out of memory" error: limit rows until all are loaded

在 SQL Server 2016 中我有一个存储过程。在此 SP 中,我想通过使用以下语句从链接服务器 (PostgreSQL) 的视图中获取所有数据:

INSERT INTO myTable
SELECT Field1,
    Field2,
    Field3,
    ...
FROM OPENQUERY(myServer, 'SELECT * FROM myDatabase.mySchema.myView')

当我这样使用它时,几分钟后我收到以下错误消息:

Out of memory while reading tuples.

我更改了 OPENQUERY 中的 SELECT 语句,只获取前 1000000 行,效果很好:

SELECT * FROM myDatabase.mySchema.myView ORDER BY Field1 LIMIT 1000000

现在我不确定获取所有数据的最实用方法是什么。我可以插入前 1000000 行,然后使用 OFFSET 插入下 1000000 行。但我认为这不是一个很好的解决方案,因为我不知道总行数是多少。循环是另一种方式,但我真的不知道这是否是实现我想要的最简单的方式。

如有任何帮助,我们将不胜感激。

我认为您正在使用 odbc 驱动程序创建链接服务器。这是 psqlODBC 驱动程序内存配置的问题。

您更改了打开数据源的 odbc 驱动程序设置

按"Configure",然后在打开的数据源详情中

"Options" 节 select "Datasource"

并在打开的 window 中检查 "use declare/fetch"。