【问题标题】:Dump of some columns from certain tables at monthly interval每月从某些表中转储某些列
【发布时间】:2021-01-10 10:05:59
【问题描述】:

这是我的第一篇文章,很抱歉在制定想法时有些笨拙。我正在为一个数字图书馆管理相当大的数据库(140 个表,其中一些有近 300 万行)。我想收集每月统计数据以查看 postgresql 数据库中的对象。当前数字在一个表中,称为“对象”,其中每个对象都有“obj_id”和“www_stats”列。该表目前有超过 200 000 行。我想要的是对“obj_id”和“www_stats”列进行某种每月“转储”,以便随时可以访问(因此普通转储文件不适合此目的)。我搜索了一些解决方案,但没有找到适合我的解决方案。你能为此提出一些合理的解决方案吗? 提前致谢。

PS。我考虑过用以下列制作额外的表 obj_statistics:'stats_id'、'obj_id'、'www_stats'、'timestamp',并将相关数据复制到其中,但这样的表在一年后将有 250 万行和超过 1200 万行5年后。

【问题讨论】:

    标签: postgresql database-administration


    【解决方案1】:

    欢迎!

    听起来您想要每月汇总(汇总)各种表格中的某些数据。这需要 1) 每个月运行一些代码,以及 2) 找出存储结果的位置。

    根据您的操作系统和部署设置,有多种方法可以运行定期安排的脚本。例如,cron,或 Postgres 13 和 pg_cron 扩展。否则,您可以使用您喜欢的任何环境中的脚本来执行此操作。

    对于结果,它们现在是一种新的信息,将它们存储在您的数据库中是很有意义的。为此,您至少可以使用表格或“物化视图”。 Postgres 支持将查询结果通过管道传输到表中,请参阅SELECT INTOINSERT INTO。或者,CREATEREFRESH MATERIALIZED VIEW 也可以吸收查询的输出。

    物化视图似乎乍一看是一个吸引人的选项。但是,没有发布的 Postgres 版本具有“增量物化视图”。因此,每次您想要添加一个月时,您都必须重建所有个月。整个物化视图都是从头开始重建的,不仅仅是新数据。

    基于最后一点,我建议一张桌子。这样一来,您一次只能将一个月添加到摘要结果中,而不会丢失旧的摘要数据。如果您随着时间的推移丢弃或归档原始源数据,但仍希望使用一些汇总数据,这一点尤其重要。

    其他几点:

    • 最好发布您使用的 Postgres 版本以及它的部署方式。这有助于人们提供您可以实际应用的答案。 (例如,PG 13 和 pg_cron 1.3 可用,但尚未在所有云提供商上可用,例如 RDS。)

    • 结构示例(代码,而不是图片)有助于使您的问题更容易回答。

    • 对于 Postgres,您的表和行数并不是特别大。但是要从数据库中获得良好的速度需要了解如何正确使用索引。而且,对于 Postgres,CREATE STATISTICS 用于各种不完善的查询计划。

    我没有包含任何语法示例,但是 Fine Documentation 应该已经涵盖了那里,或者在这里搜索档案,询问 Google 先生等。

    【讨论】:

    • 非常感谢!当然,我忘了添加版本号。我的 postgresql 是 11.9 和 pg_cron (1.1.3-2) 刚刚安装。我认为 pg_cron 和单独的表是我将研究的解决方案。 (对不起,我不能放弃箭头,我现在的声誉太低了......)
    猜你喜欢
    • 1970-01-01
    • 2011-09-01
    • 2019-04-18
    • 2018-03-13
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    相关资源
    最近更新 更多