【问题标题】:How to bulk-refresh postgres database如何批量刷新 postgres 数据库
【发布时间】:2011-12-28 13:28:43
【问题描述】:

我有一个包含天气信息的 Postgres 9.1 数据库。该数据集由大约 310 万行组成。

从 CSV 文件加载数据大约需要 2 分钟,而创建多列索引则需要更少的时间。

每 6 小时我需要完全刷新数据集。我目前的想法是将新数据集导入到不同的数据库名称中,例如“weather_imported”,一旦导入和索引创建完成,我会删除原始数据库并重命名导入的数据库。

理论上,客户端会在此操作期间继续查询数据库,但如果这有不良影响,我可能会安排让客户端默默地忽略一些错误。

问题:

  1. 这种策略会奏效吗?

  2. 如果客户碰巧在 在 DB 删除时运行查询的过程,我的假设是 在查询完成之前,数据库不会完成删除 完成 - 真的吗?

  3. 如果查询发生在 DB被删除并重命名?我假设“找不到数据库” 错误。

  4. 有更好的策略吗?

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    考虑以下策略作为替代方案:

    • 在主表中包含“数据集版本”字段。
    • 将“当前数据集版本”存储在某个中心位置,并编写您的选择以仅搜索具有当前数据集版本的行。
    • 要更新数据集:
      1. 使用新数据集版本插入所有数据。 (您可以只使用更新作业的开始时间作为版本。)
      2. 自动将“当前数据集版本”更新为您刚刚插入的值。
      3. 删除所有版本比您刚插入的版本号旧的数据。

    Presto -- 无需重新整理数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-03
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      相关资源
      最近更新 更多