postgresql - 如何批量刷新postgres数据库

标签 postgresql

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

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

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

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

问题:

  1. 该策略会奏效吗?

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

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

  4. 有没有更好的策略?

最佳答案

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

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

Presto -- 无需重新排列数据库。

关于postgresql - 如何批量刷新postgres数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8652003/

相关文章:

linux - 将文件从远程服务器复制到本地服务器不起作用

ruby-on-rails - 在 Rspec 中测试物化 View

postgresql - 更改 postgres docker 容器中 tcp_keepalives 设置的正确方法

sql - PostgreSQL 中的可延迟检查约束

sql - 使用 POSTGRES 从单个 SELECT 插入 2 个相关表

ruby-on-rails - 如何使用准备好的语句插入多行

node.js - 如何使用 Sequelize 在 postgres 中保存列类型范围内的值?

postgresql - Postgres 复制 : Incomplete Startup Packet

python - 在psql中使用将相关数据插入到两个表中

node.js - 在 Node.js Sequelize 中对连接表执行关联