如何批量刷新postgres数据库

时间:2011-12-28 04:53:24

标签: postgresql

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

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

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

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

问题:

  1. 该策略是否有效?

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

  3. 如果在时间之间发生了查询怎么办? 数据库被删除并重命名?我假设“找不到数据库” 错误。

  4. 有更好的策略吗?

1 个答案:

答案 0 :(得分:0)

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

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

Presto - 不需要随处乱搞数据库。