首页 > 解决方案 > 在 Excel/PowerQuery 中使用 psqlodbc 的性能问题

问题描述

已经在这里问过这个问题,但它被错误地标记为已关闭。


我使用 psqlODBC 和 PowerQuery 将数据从 PostgreSQL (12.4) 加载到 Microsoft Excel。最近我遇到了无法解释的性能问题。某些功能需要很长时间(15 分钟或更长时间)才能通过 ODBC 提取数据。有些功能只需几秒钟。从命令行使用 pgAdmin、Beekeeper 或 psql 运行相同的函数时,它们的执行时间都不超过 500 毫秒。

我可以做些什么来提高 psqlODBC 的性能吗?

我发现这个答案表明聚合可能是在客户端完成的。这将是非常糟糕的,因为表包含几百万行,我只想发回聚合的列。有人可以提供更多信息吗?我无法找到任何相关信息。


到目前为止我尝试过的

  1. 我用视图替换了一个函数,这似乎解决了这个问题。但是,这不是一个通用的解决方案,因为有些函数包含无法在视图中完成的逻辑。
  2. 我用pg_stat_statementsandauto_explain来找出函数是否有问题。我没有发现任何可疑之处。如前所述,该问题仅在使用 psqlODBC 时出现,因此我希望问题出现在任何地方。
  3. 修改 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(最新)。

我很感谢这里的每一条建议,我可以如何解决我的问题。

谢谢你。

标签: postgresqlodbcpowerquerypsqlodbc

解决方案


推荐阅读