我有一个包含天气信息的 Postgres 9.1 数据库。该数据集包含大约 310 万行。
从 CSV 文件加载数据大约需要 2 分钟,而创建多列索引则要少一些。
每 6 小时我需要完全刷新数据集。我目前的想法是将新数据集导入不同的数据库名称,例如“weather_imported”,一旦导入和索引创建完成,我将删除原始数据库并重命名导入的数据库。
理论上,客户端会在此操作期间继续查询数据库,但如果这有不良影响,我可能会安排让客户端默默地忽略一些错误。
问题:
该策略会奏效吗?
如果客户碰巧在 在数据库删除时运行查询的过程,我的假设是 在查询完成之前,数据库不会完成删除 完成-真的吗?
如果查询发生在 数据库被删除并重命名?我假设“找不到数据库” 错误。
有没有更好的策略?
最佳答案
考虑以下策略作为替代方案:
- 在主表中包含“数据集版本”字段。
- 将“当前数据集版本”存储在某个中心位置,并编写您的选择以仅搜索具有当前数据集版本的行。
- 要更新数据集:
- 使用新的数据集版本插入所有数据。 (您可以只使用更新作业的开始时间作为版本。)
- 将“当前数据集版本”自动更新为您刚刚插入的值。
- 删除所有版本比您刚刚插入的版本号旧的数据。
Presto -- 无需重新排列数据库。
关于postgresql - 如何批量刷新postgres数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8652003/