postgresql - 在 Excel/PowerQuery 中使用 psqlodbc 的性能问题
问题描述
已经在这里问过这个问题,但它被错误地标记为已关闭。
我使用 psqlODBC 和 PowerQuery 将数据从 PostgreSQL (12.4) 加载到 Microsoft Excel。最近我遇到了无法解释的性能问题。某些功能需要很长时间(15 分钟或更长时间)才能通过 ODBC 提取数据。有些功能只需几秒钟。从命令行使用 pgAdmin、Beekeeper 或 psql 运行相同的函数时,它们的执行时间都不超过 500 毫秒。
我可以做些什么来提高 psqlODBC 的性能吗?
我发现这个答案表明聚合可能是在客户端完成的。这将是非常糟糕的,因为表包含几百万行,我只想发回聚合的列。有人可以提供更多信息吗?我无法找到任何相关信息。
到目前为止我尝试过的
- 我用视图替换了一个函数,这似乎解决了这个问题。但是,这不是一个通用的解决方案,因为有些函数包含无法在视图中完成的逻辑。
- 我用
pg_stat_statements
andauto_explain
来找出函数是否有问题。我没有发现任何可疑之处。如前所述,该问题仅在使用 psqlODBC 时出现,因此我希望问题出现在任何地方。 - 修改 psqlODBC config的参数。至今没有成功。
细节
postgreSQL 中的函数通常是这样定义的:
CREATE FUNCTION func(parameter integer) RETURNS TABLE(<col1> <type1>, ...)
LANGUAGE 'plpgsql' COST 100 STABLE PARALLEL UNSAFE ROWS 500
AS $BODY$
BEGIN
RETURN QUERY
<SELECT ...>
END
我使用函数而不是视图,因为其中一些包含无法在视图中完成的逻辑。
服务器正在运行PostgreSQL 12.4
,客户端使用psqlODBC 12.02
,Excel 2016(最新)。
我很感谢这里的每一条建议,我可以如何解决我的问题。
谢谢你。
解决方案
推荐阅读
- spring-boot - 尝试使用 docker 映像在本地将 springboot WAR 部署到 Wildfly 时出现 Not Found 404 错误
- java - 如何获得最多两个 ZonedDateTime 实例?
- python - 将两个列表与内部嵌套列表相交
- wpf - 键盘快捷键不移动 .NET Core 3.0 项目中的 WPF 控件
- angular - NgRX 8 效果 - createEffect() 不工作 - 类型'Observable
' 不可分配给类型 'Observable - powershell - Send-MailMessage,当 LastLogonDate = never 时状态从不?
- javascript - 修复 Typescript 中的类型
- django - AttributeError:“产品”对象没有属性“过滤器”
- r - 如何使用 google sheet api 打开基本过滤器并仍然看到所有值?
- python - 如何避免 pylint 在非 python 文件上运行