0

每个人。在 postgresql 12 中,我有一个像这样的物化视图:

CREATE MATERIALIZED VIEW mv
AS
  WITH cte AS (SELECT ...), cte2 AS (SELECT ...) SELECT ...
WITH DATA;

当我在 linux crontab 中调用 REFRESH MATERIALIZED VIEW mv或执行此命令时,需要 4 个小时。

但我WITH cte AS (SELECT ...), cte2 AS (SELECT ...) SELECT ...在 pgadmin4 查询工具中执行,它只花费 7 秒。

不知道为什么差别太大。我想在 crontab 中花费 7 秒,我该怎么办?

4

1 回答 1

0

也许我找到了原因,但我不确定。

在 中WITH cte AS (SELECT ...), cte2 AS (SELECT ...) SELECT ...,有两个外部数据包装表。我将 fdw 表复制到本地使用CREATE TABLE test AS SELECT * FROM fdw.table_name,并在 cte 中替换 fdw 表使用本地表。当我调用 CREATE MATERIALIZED VIEW mv AS ... WITH DATA它时花费 12 秒 REFRESH MATERIALIZED VIEW mv_name,它花费了 2 秒。

我认为外国数据包装器是原因。为什么fdw要花这么多钱?

不是网络速度,->SELECT * FROM fdw.table_name只需几秒钟。

可能是 fdw 中的一些转换语句,-> when REFRESH MATERIALIZED VIEW(使用 fdw 表),cpu 在整个 4 小时内工作 100%。

于 2020-07-09T10:34:14.097 回答