gpt4 book ai didi

PostgreSQL View 创建巨大的临时文件

转载 作者:行者123 更新时间:2023-11-29 12:28:14 28 4
gpt4 key购买 nike

我在 Postgres 中有 3 个相当简单的表,用于记录几年前每个业务日期的有效 ID。这三个表代表记录来自这些 ID 的事件的 3 个来源。我不能给你整个表格,但想象一下:

    Date          ID
2000-01-02 1
2000-01-02 2
2000-01-02 3
2000-01-02 4
. . .
2018-01-02 49997
2018-01-02 49998
2018-01-02 49999
2018-01-02 50000

因此每个表都有可能包含数万个 ID 的每日数据。并非所有 ID 在所有日期都显示在所有表中,因此我想要的只是一个 View ,它为我提供在任何日期的任何表上显示的任何 ID 的主列表。简单:

    create view all_ids as 
select distinct * from table1 union
select distinct * from table2 union
select distinct * from table3;

View 创建没有任何问题,但无法查询。如果我想查看单个 id 在哪几天出现,我会写:

    select * from all_ids where id=37;

问题是当 Postgres 运行这个查询时,它首先尝试创建一个巨大的临时表,它是 3 个表的联合。不幸的是,这超过了 temp_file_limit (5767168kB),并且由于我不是管理员,所以我无法更改 temp_file_limit。无论如何,这似乎与我对 View 如何工作的理解相矛盾。请注意:我可以从任何单独的表中查询一个 id 或 id 列表。

我可以把它写成一个可以传递特定 ID 的函数,但是我再次相信, View 本身应该通过返回我所要求的内容来处理这个问题,而不是先在内存中创建数据域,然后然后从中选择。

其他相关信息是我们使用的是旧版本的 Postgres,9.2.23。我认为它处理 View 的方式有问题。答案可能是让管理员升级它。

有什么想法吗?

最佳答案

您正在寻找的是物化 View 。我只会引用文档::

CREATE VIEW 定义查询的 View 。 View 不是物理实体化的。相反,每次在查询中引用 View 时都会运行查询。

您创建的 View all_ids,如您所说,每次引用此 View 时都会重新创建

编辑适用于 Postgres 9.3+

关于PostgreSQL View 创建巨大的临时文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48348067/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com